【发布时间】:2011-01-10 09:32:35
【问题描述】:
我尝试为仅具有 Silverlight 用户界面的以数据为中心的应用程序设置一个干净且灵活的应用程序框架。我希望严格分离关注点,并希望尽可能灵活(例如稍后交换 ORM),同时仍然减少代码量。
我花了数周时间才找到合适的架构,尽管我的最新方法似乎符合我的要求,但我仍然不完全相信这种方法是最好的并且在技术上是可行的。
这是我的解决方案探索器的样子:
MyCompany.MyApplication.Entities
类库 - 项目,仅包含域(业务)对象,例如客户、地址等。这些是具有 [Serializable] 属性的 POCO,但不包含任何其他代码。所有属性都被标记为虚拟,以便类可以派生和覆盖这些属性。MyCompany.MyApplication.DataAccess
类库 - 项目,其中包含用于加载、保存和删除域对象的 nHibernate - 特定代码 (Sessions)。这个项目引用了实体项目和 nHibernate 库。MyCompany.MyApplication.Core
类库-项目,包含业务逻辑,通常只是映射DataAccess-项目的方法,如GetAllCustomers、SaveCustomer等。 它引用了实体项目和数据访问项目。MyCompany.MyApplication.Web
Web 应用程序 - 项目,它托管 silverlight-client-app 以及 WCF 服务以与客户端进行通信。为了向客户端公开域对象,这些类是派生的,所有属性都被覆盖并用 [DataMember] 属性标记。它引用了实体项目和核心项目。MyCompandy.MyApplication.Silverlight
Sivlerlight 3.0 - 代表用户界面的项目。它只有对 Web 项目公开的 WCF 服务的服务引用。实际的域对象不可访问,但自动生成的代理类替换它们。
请告诉我,您对此架构有何看法,以及是否存在任何冲突!进一步的问题:有什么方法可以避免域对象的属性是虚拟的并且需要覆盖它们以使它们可以通过 WCF 访问?
最好的问候, 丹尼尔·朗
【问题讨论】:
标签: wcf silverlight nhibernate architecture n-tier-architecture