2013-12-11 129 views
4

由于我们的域模型和过程,我们正在研究客户端和服务器之间的共享模型。我们的客户是非常厚实的客户。 有没有关于这种架构的任何信息,优点和缺点?在客户端和服务器之间共享模型

回答

5

理论上如果你的域层完全去耦(来自持久性,表示,基础设施等),它可以很容易地在不同的地方作为一个库重用。

然而,正如阿德里安指出,这引发了实际问题:

  • 安全性:在客户端应用程序分发特别是您的域名是有风险的。解决方法之一是如果客户端是桌面应用程序,则会混淆二进制文件。

  • 平台不匹配:您可能无法在客户端和服务器上使用相同的技术/语言。这将导致您的域的翻译,基本上翻倍的工作量,维护成本和错误倾向性。

  • 版本控制:即使重复使用相同的库,客户端和服务器上的版本也必须保持同步以防止出现不兼容问题。

此外,除非您开发的Web版本是桌面版本的精确克隆,否则我认为域的重复使用最多只能是部分。在单个客户端/服务器应用程序的情况下,我很想知道为什么要在两个层上使用相同的域......通常,客户端上的数据结构可能看起来有点像域实体,但调整为用户界面,并没有任何行为。在这种情况下,重新使用客户端的整个域图层将意味着拖拽一个庞大的对象图表,这可能会部分满足您的需求,但也包含大量其他不需要的内容。

也许你需要的是来自域驱动设计的Bounded Context的概念 - 相同的类名,但在客户端上下文和服务器上下文中略有不同的类。

+0

我的问题很不详细。我们为我们公司的内部目的开发软件。所以,我认为,安全问题没有大问题。我们有一个平台和一个版本。我想在客户端重新使用域实体,因为客户端和服务器实体都非常相似。谢谢。 – Backs

+1

+1有一些相当不错的点。 –

2

DDD和现代开发实践鼓励将域逻辑保留在客户端之外。现在,客户端发生的大部分代码都是为了充分利用客户端平台的GUI优势。

将域逻辑保留在客户端之外的两个很好的理由是安全性和可维护性。

为了安全起见,服务器应规定客户端可以执行的操作。客户端可以被黑客入侵,但是如果所有的域逻辑和安全都在服务器中,那么黑客(客户端)上的黑客就不会绕过或破坏系统。

为了可维护性,如果所有的域逻辑都在服务器上,那么它就在一个地方。如果它在一个地方(或者更好的是在一个明确定义的模块或命名空间中),那么团队中的任何人都可以更容易地维护代码。

+0

请看看我对下面的guillaume31的评论。 – Backs

相关问题