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

5

由于我们的域模型和流程,我们正在考虑在客户端和服务器之间共享模型。我们的客户端是非常厚重的客户端。 有关此类架构、优缺点的信息吗?

2个回答

6
理论上,如果您的领域层完全解耦(与持久化、表示、基础设施等无关),它可以轻松地作为库在不同的地方重复使用。
然而,正如Adrian所指出的,这引发了实际问题:
- 安全性:分发您的领域,特别是在客户端应用程序中,可能存在风险。解决方法之一是如果客户端是桌面应用程序,则混淆二进制文件。 - 平台不匹配:您可能无法在客户端和服务器上使用相同的技术/语言。这将导致对您的领域进行翻译,基本上会使初始工作量、维护成本和错误倾向加倍。 - 版本控制:即使重复使用相同的库,客户端和服务器上的版本也可能必须保持同步,以防止不兼容性。
除非您正在开发一个与桌面版本完全相同的Web版本,否则我认为域重用最多只能部分实现。在单个客户端/服务器应用程序的情况下,我很想知道为什么您会在两个层上使用相同的域...通常,在客户端上所拥有的数据结构可能看起来有点像域实体,但针对UI进行了调整,并且没有行为。在这种情况下,将整个域层重用于客户端意味着拖动一个庞大的对象图,可能部分满足您的需求,但还有许多其他不需要的内容。

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


我的问题描述得不够详细。我们开发公司内部用的软件,所以我认为安全方面不会有太大问题。我们只有一个平台和一个版本。我在考虑在客户端重用领域实体,因为客户端和服务器实体非常相似。谢谢。 - Backs

3

DDD和现代开发实践鼓励将领域逻辑保留在客户端外。当前大多数客户端代码都用于利用客户端平台的GUI美观性。

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

为了安全起见,服务器应该控制客户端可以执行什么操作。客户端可能被黑客攻击,但如果所有的领域逻辑和安全性都在服务器上,则无论客户端经历多少次黑客攻击,也不能规避或破坏系统。

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


请看一下我在下面给guillaume31的评论。 - Backs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接