【问题标题】:What Is Meant By Database/Web is Details什么是数据库/Web 是细节
【发布时间】:2016-08-30 20:01:18
【问题描述】:

我正在阅读article"Uncle" Bob Martin。他在框架和驱动程序标题下提到。

网络是一个细节。数据库是一个细节。

我无法理解他所说的“细节”是什么意思。请再解释一下。

【问题讨论】:

  • 在本文的上下文中,他的意思是 Web 应用程序/框架和数据库引擎是解决方案的实现细节,而不是架构的核心部分。您应该能够更改其中任何一个细节,而无需重新设计系统架构。
  • @dbugger 击中了头。这个 (vimeo.com/43612849) 值得一看,因为他详细阐述了那篇文章中的想法。
  • @dbugger 我明白这一点。这个细节词让我很困惑。
  • @DavidOsborne 感谢分享这个视频讲座。很有帮助
  • @mubeen 也值得一读:alistair.cockburn.us/Hexagonal+architecture & natpryce.com/articles/000786.html。这个建筑主题有许多变体。

标签: design-patterns architecture software-design


【解决方案1】:

在面向对象编程中,我们发现以抽象的、以领域为中心的设计来编写任何应用程序效果最好;也就是说,任何应用程序的核心最好是“一堆库类”,对特定形式的输入或输出一无所知,例如 UI 或数据库。 Martin 的文章主要讨论了如何构建这些类。然后,使用这些类是特定于您的 UI 和数据库的代码。您的应用程序的核心不知道它是 Web 应用程序还是控制台应用程序,还是用于按键音频电话的应用程序。

因此,网络或数据库只是一个细节,因为它不会(实际上也不会)影响您的域逻辑的核心。

当然,Web 细节可能很复杂,但理想情况下,它们都应该关注呈现正确的 HTML、Javascript、CSS 和内容文件,并收集来自用户的输入,以及“业务逻辑”(或域逻辑)将留给核心系统,而不是特定于网络。

在当今的 Web 开发环境中,丰富的客户端功能使这个方案更难掌握。最后,你可能有两个“域系统”:主要的服务器端域代码,这似乎是 Martin 正在讨论的内容,以及一个客户端域,它可能有自己的抽象的以域为中心的架构,通常写成在 Javascript 中。 Angular 和 Aurelia 等框架和库正在尝试提供一些额外的工具,以在客户端启用健壮的以领域为中心的抽象架构。对于这些客户端架构,Bob 大叔可能会说他们调用的 Web 服务和他们操作的 DOM “只是细节”;以域为中心的架构的核心是控制器和视图模型与之交互的控制器、库或服务功能。

除了 cmets 中提到的资源,更多的可以查阅 DDD(Domain-Driven Design)的概念。

【讨论】:

    猜你喜欢
    • 2017-07-30
    • 2018-05-04
    • 2019-06-28
    • 2022-01-10
    • 2011-05-01
    • 2012-02-02
    • 2021-01-03
    • 2020-05-04
    • 2022-01-09
    相关资源
    最近更新 更多