【发布时间】:2018-08-29 14:35:11
【问题描述】:
最近我一直在重新考虑重构我的旧项目的各种方法,确保首先有一个正确的设计并将架构应用到代码中。 应用程序的业务逻辑应该与数据持久性实现、表示框架、技术甚至(理想情况下)编程语言无关。 我的问题是,您如何处理看起来与特定技术紧密耦合的用例/需求?
在我的示例中,我想在浏览器上查看来自微控制器的当前传感器值。可以通过将值存储在数据库中、读取它们并将它们发送到表示层来实现这一点。然而,还有另一种方式似乎更快,而且听起来更合理。通过使用 websocket,服务器将值中继到浏览器,服务器本身通过流从微控制器接收这些值。
这两种方法需要几乎完全不同的设计。第一个需要与持久层通信的存储库模式,而第二个则不需要。用例的数据流也不同。因此,满足相同要求的两种不同实现,仅仅因为技术和框架的选择而需要不同的架构。
是否仍然可以以不耦合到两种实现之一的方式设计架构?
【问题讨论】:
-
您所描述的业务逻辑在哪里?你是否以任何方式改变价值观?你所描述的只是一个管道,它似乎最适合流式传输......
-
@JohnGkikas “服务器本身通过流从微控制器接收这些值” - 两种方法都是这种情况吗?这是通过微控制器 API 获取输入的标准方式吗?
-
@SKleanthous 域指定传感器类及其字段(类型名称 id)和读取类(传感器 ID 读取),因此在存储之前,来自微控制器的输入应该由服务器上的处理程序,它调用服务将传入的数据转换为相应的域对象,然后调用存储库,使用可用的 ORM 操作该对象以实现持久性。我如何过滤值或应用策略是关于用例的,所以我调用一个服务,将这个逻辑应用到一个对象上并返回结果
-
@guillaume31 数据的形式和以固定方式发送到服务器的方式。处理程序服务理想地对此输入流做出反应并路由到将数据映射到域对象的方法,然后存储到数据库中(或中继到表示层)
标签: architecture uml domain-driven-design software-design