【发布时间】:2010-12-08 04:45:01
【问题描述】:
为了分离关注点,在我当前的项目中,我决定将我的 DAL 和 BLL/Business 对象完全分离到单独的程序集中。我想将我的业务对象保持为简单的结构,没有任何逻辑,以使事情变得非常简单。我希望我也可以将我的业务逻辑与我的 DAL 分开。所以我的应用程序会告诉我的 DAL 加载我的对象,我的 DAL 将运行到数据库并获取数据,用数据填充对象,然后将其传递回我的 BLL。
问题 - 我如何将我的 DAL 放在单独的程序集中并将数据推送到只读字段中?
- 如果我将 getter 设置为受保护,那么继承的对象可以访问它,这不是我真正想要的,因为我将返回继承的对象类型,而不是原始对象类型。
- 如果我将 getter 设置为内部,那么我的 DAL 必须与我不想要的 BLL 驻留在同一个程序集中。
- 如果我将 getter 设置为 public,那么任何人都可以在它应该是只读的时候读/写它。
编辑:我注意到我可以有一个 ObjectBase 的返回类型,但实际上是从 ObjectBase 派生的一个对象或对象集合返回给外部世界(在我的 DAL 之外)属性将是只读的,但我的派生类型(只能在我的 DAL 中访问)属性实际上是读/写的。
【问题讨论】:
-
有一个原因,如果你想让你的业务对象的属性只读,你不只是通过构造函数设置它们吗?
-
如果您要从头开始构建 DLL,我建议您阅读 Dino Esposito 和 Andrea Salterello amazon.com/… 撰写的“Microsoft .NET:为企业构建应用程序”
-
@CSharpAtl 我觉得这不是正确的方法。
-
@BobTheBuilder 通过构造函数设置业务对象值是如何创建不可变对象的更多主题:weblogs.asp.net/bleroy/archive/2008/01/16/…
-
在阅读了您的问题和 cmets 之后,我认为您还没有接受没有完美的解决方案。您的设计要求已成为一种愿望——您将不得不以一种或另一种方式接受权衡。