How to implement a common kernel (DDD) in .Net correctly

I have an outdated application that I will reverse engineer because it is what we call the “mud ball” at the moment, without stratification or SOC at all. The command is used for modular work, which means that there is a team that works on “training,” “Job Opportunities,” which works on the module that controls “Work Planning (Military).” We have one site that reveals these areas to our customers as a service portal, one database and several external applications that we serve.

I am good at remaking most of the layers, except how to split the domain correctly (I should mention at this point that we are using .Net 4.0). My initial thought was that these were limited contexts because of how they worked, they really had different sets of users, but now I believe that the reality is people who use this site, and can use several areas. Of course, some groups ONLY use one service exclusively, but many use several. The purpose of the site is a unified management of "members". Between modules, we have classes that are unique to a module, and then we have common classes, for example, the concept of a member is known and used by all modules. Member is actually the core concept, the site adds value,tracking member information in all of these areas at once. This is mainly a few closely related, but separate areas in the system and the general area. Hope this is clear enough to answer the question I have.

I think that I will still have a common core, even if these are not limited contexts, for shared objects and shared domain interfaces, such as a common repository interface. It would be prudent to put all of the common code (shared repository, core domain model, shared core, etc.) into the same namespace or namespace hierarchy and should this namespace be isolated in its own assembly? In the same way, I could then split each area (“training”, “opportunities” ...) into my own assemblies or it would be better to have them all in one assembly and logically divide them into a namespace. On the one hand, it’s a little easier to see how the modules are physically separated, but I am concerned about situations where two modules must work together to solve a problem.How would they communicate and maintain acyclicity (through services at the application level, which I guess).

( ):

Domain.Model(dll) - Domain.Model.Core    - ( )    - RepositoryFramework    -- .... - Domain.Model.Training - Domain.Model.Opportunities...

Domain.Model.Core

Domain.Model.Training(dll)

Domain.Model.Opportunities(dll) ( ?)

,

+5
1

, ( ) . , .

, , (, /), ( , ) /.

( ) (, DomainModel.Core, DomainModel.Training). . , "using".

, .

+3

All Articles