Entity Framework 4 Code First: бизнес-методы - PullRequest
1 голос
/ 15 октября 2010

Может ли кто-нибудь сказать мне, где лучше всего разместить мои бизнес-методы при использовании первых POCO-кода EF4? Должны ли они пойти в классе POCO? Э.Г.

public class customer
    public property Id as int32
    public property Name as string
    public property Archived as boolean

    public sub MarkAsArchived
       me.Archived = true 
    end sub

    public function EmailAllInvoices as boolean
        ...
    end function
end class

Или класс POCO должен быть как можно более чистым, а отдельный класс должен использоваться для бизнес-логики, которая принимает экземпляр POCO клиента в конструкторе для работы?

Спасибо.

Ответы [ 2 ]

1 голос
/ 16 октября 2010

@ Ладислав Мрнка прав, это зависит от вашей архитектуры.

Насколько сложны ваши бизнес-правила?Могут ли они часто меняться?Какие клиенты будут использовать вашу модель, только ваш собственный веб-сайт или вы выставляете API, OData и т. Д.?

На все вопросы, на которые необходимо ответить.

Лично у нас есть простые бизнес-правилаи довольно простая архитектура.

Поэтому я делаю все проверки на уровне обслуживания и создаю частичные классы для своих POCO, чтобы облегчить бизнес-правила и выдавать пользовательские исключения.

Например

public void Add(Order order)
{
   try
   {
      order.Validate(); // method in Order.cs partial class
      repository.Add(order);
   }
   catch (InvalidOrderOperationException exc) // custom exc
   {
      // do something
   }
}

Как я уже сказал - зависит от вашей архитектуры.

Если у вас очень сложные бизнес-правила, рассмотрите возможность использования шаблона спецификации.

«Бог DDD»У (Мартина Фаулера) есть хорошая статья здесь .

0 голосов
/ 15 октября 2010

Это определенно зависит от «архитектуры» вашего бизнес-уровня.Вы можете использовать POCO в качестве объекта передачи данных и иметь некоторый класс бизнес-уровня верхнего уровня, который будет обрабатывать бизнес-операции - в основном мы можем говорить о шаблоне сценария транзакции.Или вы можете размещать методы в ваших объектах POCO и «продвигать» их в объекты Domain.Тогда ваша бизнес-логика будет находиться внутри ваших доменных объектов и доменных служб (некоторые функции бизнес-логики предназначены для нескольких доменных объектов, поэтому ее следует поместить в отдельный класс).Это называется управляемым доменом дизайном (но он предлагает гораздо больше идей, связанных с архитектурой).

...