And just to add to the confusion, I disagree. I've rarely found it to be of
any significant advantage to make my domain model unaware of the
persistence mechanism, and quite often it's a major, major disadvantage. A
repository which is queryable in any other way than using explicit methods
or query objects (in other words, a repository exposing IQueryable) is
completely out of the question.

Passing ISession into the business methods may not be necessary (the
session can be contextual), but there's nothing really wrong with.

/G


2013/9/29 Angel Java Lopez <[email protected]>

> +1
>
>
> On Sun, Sep 29, 2013 at 11:01 AM, Oskar Berggren <[email protected]
> > wrote:
>
>> To give short and quick answer: Ususally I would expect my domain model
>> to be unaware oh NHibernate or any other persistence mechanism. Instead of
>> passing the ISession, it's better to pass the required repository
>> interfaces to a domain class, since the repository interfaces in my view
>> are part of the domain model (but not the repository implementation). For
>> logic that won't fit nicely inside a domain model class, I would normally
>> use a domain service class to orchestrate the algorithm between the
>> involved model classes.
>>
>> The repository implementation itself should not contain logic beyond that
>> of simple store/retrieve/query (and for complex queries it might be better
>> to use a query object).
>> /Oskar
>>
>>
>>
>> 2013/9/28 mg <[email protected]>
>>
>>> Hi,
>>> What is the proper place to put business some more complex business
>>> logic which requires access to other Models, not only the one on which the
>>> operation is being executed?
>>> *Are there any open-source projects which uses a bit of business logic
>>> and could be a good example?*
>>>
>>> To make myself clear: all the examples of business logic I've found are
>>> very simple ones, like *class Person *with calculated property *FullName
>>> *which is just a getter: FirstName + " " + LastName, or calculating
>>> Person's Age by theirs BirthDate field.
>>>
>>> Now I need some more complex logic, for example to calculate the *
>>> Invoice* amount based on today's *PricingPlan* model which is separate
>>> model.
>>> Where should I implement methods like this? Is the Repository pattern
>>> supposed to be place for this methods?
>>> Or is it OK to implement these methods in the class it is logically
>>> related to, just passing the ISession instance to the method, like so:
>>>
>>> class Invoice
>>> {
>>>     // ...
>>>     public void CalculatePrice(ISession dbSess)
>>>     {
>>>         var pricePlan = dbSess.Get<PricingPlan>(...); //
>>>     }
>>> }
>>>
>>> I come from python/django background, and there's no such problem, since
>>> the db connection/session management is hidden away from user.
>>>
>>> Best regards
>>> MG
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "nhusers" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to [email protected].
>>> To post to this group, send email to [email protected].
>>> Visit this group at http://groups.google.com/group/nhusers.
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "nhusers" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at http://groups.google.com/group/nhusers.
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "nhusers" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/nhusers.
> For more options, visit https://groups.google.com/groups/opt_out.
>

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to