2015-08-13 3 views
0

На трехуровневом приложении я использую свои бизнес-объекты для создания dbSets на моем dbContext.Как инкапсулировать бизнес-логику на бизнес-сущности?

На бизнес-уровне:

public class User 
{ 
    string name {get;set;} 
} 

На слое данных:

public context:DbContext 
{ 
    public DbSet<User> Users {get;set;} 
} 

Мой вопрос, то как я могу инкапсулировать логику сущностей? Я мог бы использовать методы расширения, но мне также нужны некоторые свойства, и я не хочу, чтобы они просачивались за пределы домена.

+1

* Я использую мои бизнес-объекты для создания dbSets на моем DbContext * ERM ... что? Вам лучше показать один пример кода в коде. Этот вопрос никогда не будет работать только со словами. –

ответ

4

При таком типе архитектуры лучше всего создавать Interactors, которые содержат всю бизнес-логику. Таким образом, ваши модели домена (например, Пользователь) могут быть очень легкими.

Существует два распространенных способа создания Interactors. Один из способов - создать объект службы. Услуга может предлагать все варианты использования и выполнять всю бизнес-логику. Этот подход работает лучше для простых моделей домена и для малых/средних приложений.

Service Interactor Пример:

public class UserService 
{ 
    public void ChangeUsername(User user, string name) 
    { 
     ... business logic ... 
    } 
} 

Другой распространенный способ инкапсулировать бизнес-логику, чтобы создать объект за прецедент. Всякий раз, когда вы добавляете новую операцию, просто создайте новый класс. Это требует большей начальной работы и лучшего понимания архитектуры предприятия, но приводит к очень масштабируемому решению.

Use Case Interactor Пример:

public class ChangeUsernameOperation 
{ 
    public void ChangeUsernameOperation(User user, string name) 
    { 
     ... business logic ... 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^