Hey,

I'd like to add a few things to Myrle's answer. (;

Given James' leasing sample is another type of loan, I completely agree
with Myrle
that this should be an extension to the already existing portfolio service.
This can be
accomplished by simply adding a new loan type to it. The design of
portfolio is based
on an SPI pattern, that allows you to implement your type of loan product
easily.

Saying this I'd like to use the chance to start a discussion about our
internal design
to be able to extract some educational documentation in the future.

NOTE: Just to be clear once more, this is not a recommendation to create
this type of
service, the whole functionality can and should be implemented using the
portfolio
service.

To design a new service we are following a three step approach which is
outlined as:

    1) Define the domain
    2) Clone the template
    3) Implement domain specific functionalities

1) Define the domain
Based on Evan's Domain Driven Design[1], we shape every microservice based
on the
definition of a domain and the related bounded context. A possible leasing
service would
take care about all domain specific objects, and utilizes other domain
specific services,
e.g. customer, and accounting.

The leasing service would 'rule' over all domain objects within it's own
bounded context,
e.g. product definition, payment processing, product history, and stores
needed data in a
new defined database.

This provides a clean distinction between what is the job of the leasing
service and what
are the responsibilities of other, already existing services.

2) Clone the template
After the first design iteration is done, you simply clone the existing
template project and
follow the instructions found there. The template project provides a ready
made project
that follows our best practices service layout, and already has most of the
needed
plumbing built in. This allows you to focus on you requirements instead of
reinventing
the wheel over and over again.

3) Implement domain specific functionalities
Once you have cloned the template project and made it your own it is now
time to start
hacking away, focusing only on your needed functionality.

As Myrle already mentioned, based on the complexity implementing a new
service is a
matter of days or weeks, not months nor years.

Just to add a little of my own taste, I would suggest to always start with
a MVP (minimal
viable product) implementation to be able to collect early feedback from
your customers.
This allows you to adopt early and prevent unwanted surprises once you
release with a
big bang.

Cheers

Markus

.::Yagni likes a DRY KISS::.

1 - https://en.wikipedia.org/wiki/Domain-driven_design

On Tue, Nov 7, 2017 at 9:47 AM Myrle Krantz <my...@apache.org> wrote:

> Hi James,
>
> The service you describe as LeaseNow has a large overlap with the
> service implemented as portfolio. (1)
>
> Missing relative to your requirements list are:
> * aggregate payment information across multiple loans,
> * support for the dashboard you indicate,
> * outside payment connectors.
>
> Your "nice to have" (late fees) is already implemented.
>
> I do wish to eventually split that service into two: one focused more
> on the specific product (individual loans) and one focused more on the
> generic aspects of banking products in general.  But for that, I need
> more than just one use case.
>
> This is a very sophisticated service.  I've been working on it and on
> the services which support it for the better part of a year.  In
> particular daily interest accrual throws up issues of synchronization
> and security which are hard to solve in a distributed computing
> environment.
>
> If on the other hand, you want to know how long it takes to create a
> simple service, some of our services were created in under a week.  A
> service which saves very simple information, and which has only
> limited interaction with other services can be created very quickly by
> creating the template project you can find here (2)
>
> Since you described the boundaries of the portfolio service fairly
> precisely, I do believe you are thinking about services correctly.
>
> Regards,
> Myrle
>
> 1.) https://github.com/mifosio/portfolio
> 2.) https://github.com/mifosio/template
>
>
> On Mon, Nov 6, 2017 at 11:59 PM, James Dailey <jamespdai...@gmail.com>
> wrote:
> > hi Devs
> >
> > (This is about the new code, recently accepted, under the term
> Fineract-CN,
> > and is NOT about Fineract 1.x)
> >
> > Let's say I want to build a fairly lightweight service that calculates a
> > payment table for a customer and accepts payments. (maybe that is two
> > services)  I'd like to use the newly accepted Fineract-CN code because
> I've
> > heard it uses microservices that can be put together in novel ways and
> thus
> > enable different kinds of financial service provisioning.   Is there a
> > general approach to this, in this new development paradigm, that helps
> > answer the question: how long and how much effort to get to that new
> > service?
> >
> > Let's call the new service "LeasePayNow".  The financial product is a
> > continuous payment, let's call it a lease payment.  The consumer must put
> > something "down" (could be an up front fee) and then a payment plan is
> > provided from a menu of plans.  The payments are recorded by the service
> as
> > they are received and compared against the expected payments.  Late fees
> > may be added but that's a "nice to have" in our current thought exercise.
> >
> > The LeaseNowPay is dependent upon (relates to) a customer service that
> > manages the customers and holds status-of-customer information.  It is
> also
> > dependent upon the outside payment connection(s)/connectors.
> >
> > Another service(?) LeaseNowPayDashboard displays the portfolio of the
> > LeasePayNow, an aggregation of all expected and actual payments and
> allows
> > for filtering and summation by segments.  Some ratios and other
> > calculations can be done in the Dashboard.
> >
> > I'm looking for someone who can collaborate on this.  But, first I hope
> > that I am thinking about the microservices and services concept
> > appropriately (smart endpoints, dumb pipes) and would like to hear back
> > from anyone who gets how this is put together.
> >
> > Thanks!
> > James Dailey
>

Reply via email to