我应该如何区分实体方法?

问题描述:

SO的好人,我应该如何区分实体方法?

今天我对业务层设计有一些严重的顾虑。 它是基于实体POCO对象和 我想逻辑添加到这些实体,但是,有两种类型的逻辑:

  1. 纯C#逻辑
  2. 持久性逻辑(在我的情况LinqToEntities)

我的问题很简单:

我应该怎样单独这两种?

首先,我正在考虑将这两个方法作为方法添加到实体中。并使用部分类来拆分它们。

其次,我认为我不希望超重对象与许多方法。 因此,也许为什么不使用静态类或单例执行LinqToEntities的方法,并将纯C#留在实体方法中。 然后我会有几个类按功能分组提供逻辑,该实体作为参数传递给类的方法。

它确实让我困扰,因为第二种解决方案看起来比较干净,但它看起来像打破了面向对象的范例。另一方面,第一个看起来像是反模式。

您认为如何?你有解决这个悖论的明智解决方案吗?

精神分裂症编辑:实际上我称之为持久性逻辑应该去BLAL中的DAL和纯粹的c#逻辑。 POCO实体由DAL生成。然后,我可以在我的BLL中扩展这些实体以添加方法。在我的DAL中,我应该将第二种解决方案中暴露的逻辑结构化。

+0

嗯,你为什么说第二种方法打破了O型范式?究竟以什么方式?这是您对选项2的唯一关注吗? – 2009-12-04 11:02:17

+0

在OO中,您将消息发送给对象。在第二种解决方案中,将对象作为将执行此工作的方法的参数传递。它看起来像OO仿真:以对象作为第一个参数的静态方法。 这是我唯一关心的问题,我只想避免一个超重的实体。 – Roubachof 2009-12-04 11:27:54

+0

在这种情况下,您的实体将做的事情比业务实体应该做的要多很多倍。在任何情况下,我都无法评估这一点。 :) – 2009-12-04 12:48:10

描述实体如何保存/加载的逻辑不属于实体本身;它更可能成为持久性服务,数据访问对象等的角色。

我会让对象在对象中的具体逻辑 - 我们在这里讨论对象行为,然后创建一个服务处理这种对象类型的持久性问题。

+0

mmmh,我在SOA中,所以我不想创建一个持久性服务。它会打破体系结构。看,这个bll将是一个服务,如果这个服务必须依赖一个持久化服务,那么它将不会是自治的... – Roubachof 2009-12-04 11:34:05

+2

我认为你在这里混合了不同的概念。考虑你正在谈论的服务是SOA架构的一个组件*。这是一个粒度问题:该组件具有自己的设计。当我谈论持久性服务时,我不是在谈论SOA生态系统的另一个高级别独立服务 - 我正在谈论现有服务的一个可能内部组件。 “持久性服务”可以是一个简单的类。如果您愿意,请阅读“数据访问对象”。 – 2009-12-04 11:46:49

+0

好的,单词*组件*确实不太模糊。 – Roubachof 2009-12-04 12:19:28