2011-01-26 3 views
1

Я никогда не использовал POCOs, поэтому у меня есть привычка вкладывать много логики в классы бизнес-объектов. Поэтому я считаю, что мне не хватает некоторых важных понятий о классах-макетах и ​​мыслительного процесса, который здесь нужен.Где вводить логику поведения при использовании POCOs?

Так что я был бы признателен за некоторые идеи, указывающие на мой мозг в правильном направлении;

Скажите, есть ли у вас два класса; Компания и Сотрудник. Не могли бы вы привести некоторые примеры того, какие классы вы бы построили «вокруг», которые занимаются различными поведением/проверкой и т. Д.? (как и некоторые имена классов, а также краткое описание их назначения)

(или любые другие примеры были бы столь же полезно, я думаю.)

ответ

1

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

[MetadataType(typeof(EmployeeMetadata))] 
    public partial class Employee 
    { 
     public class EmployeeMetadata 
     { 
      [Required(ErrorMessage="Employee Name is Required")] 
      [StringLength(50, ErrorMessage="Must be under 30 Characters")] 
      public string Name { get; set; } 
     } 
    } 

эти классы называются «приятель классы» См this

+0

Я вижу, я не знали об этих свойствах атрибутов. Хотя я забыл сказать, но я думал о POCOs, существующих в сборке DAL. Это не позволило бы мне расшириться таким образом. – bretddog

+0

вы действительно можете расширить его там не возникнет никаких проблем и придет в Data Annotations вам не нужно это делать, вы можете написать ур пользовательской логики в сеттер для правильной проверки ... Но стандартный и простой способ - это как атрибуты. – Praneeth

0

Я обычно создаю фасадную слой для любых логических кодовых группировок моя система. Например, допустим, пользователю нужно будет иметь дело с данными компании и данными о сотрудниках, если у пользователя есть учетные данные администратора. Так что в этом случае я бы создать класс AdminFacade следующим образом:

public class AdminFacade 
{ 
    public Company GetCompanyByEmployee(Employee employee) 
    { 
     // open a db session/web service call etc. 
     // run a query to find the company by employe id. 
     // populate the company object 
     // close db session 
     // return the populated customer object 
    } 
} 

Я обычно есть свой GUI инстанцирует все классы Фасадные и это все, что имеет дело с графическим интерфейсом. Вы также можете добавить проверку в начале метода GetCompanyByEmployee и выбросить исключение, если скажем, что employee.startdate меньше года.

Надеюсь, что это поможет.

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