在客户端和服务器之间共享模型

时间:2013-12-11 09:19:28

标签: client-server domain-driven-design

由于我们的域模型和过程,我们正在寻找客户端和服务器之间的共享模型。我们的客户真的很厚。 有没有关于这种架构,利弊的信息?

2 个答案:

答案 0 :(得分:6)

理论上如果您的域层完全脱离(来自持久性,演示,基础架构等),它可以很容易地在不同的地方重用为库。

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

  • 安全性:特别是在客户端应用程序中分发域名可能会有风险。如果客户端是桌面应用程序,那么解决方法就是混淆二进制文件。

  • 平台不匹配:您可能无法在客户端和服务器上使用相同的技术/语言。这将导致您的域名的翻译,基本上将初始工作量,维护成本和容易出错的情况加倍。

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

此外,除非您正在开发一个完全克隆桌面版本的Web版本,否则我认为域重用最多也是部分的。在单个客户端/服务器应用程序的情况下,我很想知道为什么你会在两个层上使用相同的域...通常你在客户端拥有的数据结构可能看起来有点像域实体,但为UI调整,没有任何行为。在这种情况下,在客户端重用整个域层意味着拖拽一个庞大的对象图,可能部分地完成你需要的东西,还有大量其他不需要的东西。

您可能需要的是来自Domain Driven Design的Bounded Context的概念 - 相同的类名,但客户端上下文和服务器上下文中的类略有不同。

答案 1 :(得分:2)

DDD和现代开发实践鼓励将域逻辑保留在客户端之外。如今,客户端发生的大多数代码都是利用客户端平台的GUI优点。

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

为了安全起见,服务器应该规范客户端可以执行的操作。客户端可以被黑客攻击,但如果所有域逻辑和安全性都在服务器中,那么任何数量的黑客攻击(在客户端上)都不能绕过或损坏系统。

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