How do i design EF5 code first entities with protected/private members DDD style

So I am reading this DDD book and at the same time designing a new system. In the DDD book they have an example where the entity have private members such as ID and other values.

Lets say as an example we have a user entity and it has id and a collection of courses it has the right to attend.

Then in DDD style they use something like GrantRightTo(Course c) if we say are on a user entity. And that is all good and well, because in the function I can now check any business rules like if the user is signed up to too many courses. Smart!

The alternative being that anyone has permission to the collection of courses but then the controllers need to know business rules which is not good.

Now here is the problem with EF code first, I can't get my collection of courses to be private/protected like my book does it and still be persisted (dbcontext) So what to do?

I could of course have the collection public and still have a method like GrantRightTo, but then other developers might do it the wrong way, so not ideal.

What to do?

Answers


The best way to do this is to map your database model with DTO's (data transfer object).

You would create an extra layer with a DTO-model. You real Domain Model could then be based on this DB Model. In your Domain Model you can than abstract away the differences in the underlying model.

This also has a disadvantage in that you would need to maintain both models if there are vertical changes in your projects. However, it also allows your domain model to change independently from your physical database model.


Need Your Help

Dotted/Dashed circle shapes using CSS - Not rendering right in Chrome

css angularjs google-chrome internet-explorer svg

We're trying to render a circle in which I can place a number. I want the circle to use either a solid, dashed or dotted border. In addition the color can vary and it would be all defined in CSS, so

Syntax choices for accessing child objects

php syntax object static syntactic-sugar

I'm wondering which is semantically and technically most optimal of my choices here. I've created a simple object registry class, but the method of object access has me wondering what's best. I'm

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.