Как мне разделить методы сущностей?

Добрые люди из СО,

Сегодня у меня есть серьезные опасения по поводу дизайна моего бизнес-уровня. Он основан на объектах Entity POCO, и я хочу добавить логику к этим объектам, НО есть 2 типа логики:

  1. Чистая логика C#
  2. Логика сохранения (LinqToEntities в моем случае)

Мой вопрос прост:

Как мне разделить эти два вида?

Во-первых, я думал о добавлении этих двух методов к сущностям. И использовать частичные классы для их разделения.

Во-вторых, я подумал, что мне не нужен перегруженный объект с МНОЖЕСТВОМ методов. Так что, может быть, почему бы не использовать статические классы или синглтоны с методами, выполняющими функции LinqToEntities, и оставить чистый C# в методах сущностей. Затем у меня было бы несколько классов, сгруппированных по функциональному признаку, обеспечивающих логику, сущность передается в качестве аргумента методам классов.

Меня это очень беспокоит, потому что второе решение кажется чище, но похоже, что оно ломает объектно-ориентированную парадигму. С другой стороны, первый кажется анти-шаблоном.

Как вы думаете ? У вас есть яркое решение, разрешающее этот парадокс?

Шизофреническое редактирование: на самом деле то, что я называю логикой постоянства, должно идти в DAL, а чистая логика C# — в BLL. Сущности POCO создаются DAL. Затем я могу расширить эти объекты в своем BLL, чтобы добавить методы. В моем DAL я должен структурировать логику, представленную во втором решении.


person Roubachof    schedule 04.12.2009    source источник
comment
Эм, почему вы говорите, что 2-й метод ломает парадигму OO? Какими именно способами? И это единственное, что вас беспокоит во втором варианте?   -  person o.k.w    schedule 04.12.2009
comment
В ОО вы отправляете сообщения объекту. Во втором решении вы передаете объект в качестве параметра метода, который будет выполнять эту работу. Похоже на эмуляцию ООП: статический метод с объектом в качестве первого аргумента. Это моя единственная забота, я просто хочу избежать лишнего веса.   -  person Roubachof    schedule 04.12.2009
comment
В этом случае ваши сущности будут делать все, что во много раз больше того, чем должна быть бизнес-сущность. В любом случае, я не в лучшем положении, чтобы оценить это. :)   -  person o.k.w    schedule 04.12.2009


Ответы (1)


Логика, описывающая, как сущность должна быть сохранена/загружена, не принадлежит самой сущности; скорее всего, это роль службы постоянства, объекта доступа к данным и т. д.

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

person Romain Verdier    schedule 04.12.2009
comment
ммм, я работаю в SOA, поэтому не хочу создавать службу постоянства. Это сломало бы архитектуру. Видите ли, этот bll будет службой, если эта служба ДОЛЖНА полагаться на службу постоянства, тогда она не будет автономной... - person Roubachof; 04.12.2009
comment
Я думаю, вы смешиваете здесь разные понятия. Учтите, что служба, о которой вы говорите, является одним компонентом вашей архитектуры SOA. Это вопрос детализации: этот компонент имеет собственный дизайн. Когда я говорю о службе постоянства, я не говорю о другой независимой службе высокого уровня вашей экосистемы SOA — я говорю о возможном внутреннем компоненте вашей существующей службы. Служба постоянства может быть простым классом. Прочитайте объект доступа к данным, если хотите. - person Romain Verdier; 04.12.2009