【问题标题】:n-tiered architecture with Silverlight, WCF and nHibernate使用 Silverlight、WCF 和 nHibernate 的 n 层架构
【发布时间】: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


    【解决方案1】:

    Daniel,您无法绕过虚拟属性的 nhiberante 要求。你有没有考虑过使用 Dto 的?

    【讨论】:

    • 我实际上不明白,我怎么能从使用 DataTransferObjects 中受益?据我所知,它们“只是”封装了我的 BusinessObjects...?
    • 当您需要修改您的业务对象时,尤其是当您添加或删除属性时,好处就来了。当您更改实体/业务/域对象时,您的 Web 服务合同将更改,从而破坏您的 Web 应用程序。拥有 DTO 允许您更改实体,同时允许依赖于 Web 服务的应用程序在不更改的情况下正常运行。
    • 谢谢!读完文章后,我很害怕为什么我以前还没有听说过 DTO 的优势!太好了!
    猜你喜欢
    • 2011-05-14
    • 2011-02-01
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多