gpt4 book ai didi

ruby-on-rails - 使用 EBC 的架构的实际示例?

转载 作者:数据小太阳 更新时间:2023-10-29 06:26:35 26 4
gpt4 key购买 nike

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

2年前关闭。




Improve this question




我对 Robert Martin 的演讲很感兴趣 "Architecture: The Lost Years" .在其中,他讨论了 MVC 所基于的实体、边界、控制设计模式。我喜欢推迟架构决策的想法。他描述了在他自己的 wiki 应用程序 FitNesse 中推迟关于如何实现 DB 层的决定。我在自己的编码中有机地推迟了这样的决定,尽管没有先入为主的模块化设计带来了这一点。

我想从实际的角度更好地理解这个 EBC 架构(它似乎与 DCI 密切相关),以便我可以开始在一个小项目中使用。我想利用“推迟决定”和交换设计的各个方面(如 UI)的能力。

例如,Rails 使用了 EBC (MVC) 的一种形式,但它是如此严重,以至于人们无法轻易替代替代 UI,从而将 Rails 应用程序转换为控制台应用程序或桌面应用程序。对我来说,关于设计的有趣之处在于这种通过交换一个东西并插入另一个东西来转换应用程序的能力。 也就是说,我想知道设计一个架构的想法,这样人们就可以,从某种意义上说,换掉 UI或持久层。我觉得如果架构设计好,耦合度会低,这样的壮举就可以实现了。

我已订购 the book鲍勃在演讲中提到的伊瓦尔·雅各布森 (Ivar Jacobson)。我在网上搜索了很多,但我发现的所有示例都显示了简单的图表。我说代码。通过查看一些演示概念并展示如何通过使用边界类将一层(UI、DB)替换为其他一些实现的简单类,我会受益更多。

如果有人不能给我指出一个很好的资源来说明这一点,这会很难吗?也许我们可以使用许多软件书籍中使用的待机示例:视频租赁店(现在几乎是一个遗物)。请演示如何交换 UI 或 DB 层。让我感到困惑的一件事是观点。我无法从我看到的图表中分辨出 View 是边界类本身还是它们只是与它们通信。此外,Bob 提到 EBC 的初衷是我们有很多微 View 而不是单个宏 View (就像我们在典型的 MVC 中所做的那样);我很好奇这会是什么样子。 (我更喜欢 Ruby 或 JavaScript,但由于乞丐不能挑剔,任何例子都可以。)

谢谢你。

最佳答案

据我了解鲍勃叔叔使用“EBI”的视频( 实体 边界 交互者 你应该/完全脱离你的业务行为)框架/操作系统和服务。

因此,对于 Rails 应用程序,您的业务行为/状态完全不依赖于 Rails 框架,因此可以像使用 rspec 一样进行测试,而无需触发 Rails!

所以在业务方面你有 边界使用请求和响应模型与 Rails 端交互的类(非常简单的数据持有者,不与 Rails 的常用模型交换)。只有边界类与 交互互动者 实现(业务)用例/场景的类。只有 互动者 类与 交互实体封装业务状态的类。

在 Rails 一侧,您可以找到 Controller 交互的类边界类(使用请求模型)和向后 边界类与 交互主持人 (使用响应模型)。只有 演示者/ Controller 与 View 交互(在模型的帮助下(同样是简单的数据持有者)。请注意,在 Rails 领域 演示者 最有可能是 Controller

这让 AR 何去何从?那么AR只是提供持久化服务。与同级演示者/ Controller 级别你会发现服务 提供服务的类边界类。因此,它们提供所有必要的服务,这些服务依赖于框架/操作系统/技术,如持久性、安全性、计时、通知等。

通过这种架构,您真的能够重用您的业务逻辑并完全取代 UI 或数据库技术。例如,移植到移动设备(iOS、Android、Windows)应该非常简单。

使用 Rails,您的 应用文件夹可能看起来像:

app/
controllers/ Only these interact with Boundary classes
models/ simple data-holders, no AR here! (see services)
views/
services/ AR-stuff
boundaries/ To be tested without Rails
models/ Request & Response
interactors/ use cases / scenarios, to be tested without Rails
entities/ "the real business model without technical dependencies"

使用这种架构,您需要编写更多代码,但不要忘记良好架构的好处:
  • 良好的架构允许推迟重大更改
  • 一个好的架构可以最大化(主要)未进行的更改

  • 最后说明:相比MVC模式,它更像是用EBI代替了M,C可以拆分为CP/resenter),并增加了一个S(服务)。所以这可以称为:VCPS/EBI,但这对我来说听起来很丑陋;-) BEPVICS 可能吗?

    @Seralize , 感谢您的反馈意见。

    让我试着回答你的问题,到目前为止我理解它们:服务中的东西与 Rails 耦合。它们为 EBI 端的逻辑提供了实现。在安全用例中,你必须清楚你有什么(量化的)需求,所以你知道你可以在 EBI 端实现什么逻辑,例如关于用户(角色)何时可以访问什么内容的(业务)规则(并且需要进行身份验证)。

    这意味着实现身份验证将使用 Rails 实现,该服务将由 EBI 使用。 EBI 中与安全相关的逻辑很容易在您的 Java GUI 示例中重用。在那里您只需重新实现身份验证服务。

    在安全示例中要清楚:

    EBI 方面有一个逻辑:什么东西需要什么样的安全性,何时以及如何。 Rails 对此一无所知,它请求 EBI 端做什么,或者 EBI 端请求 Rails 端采取行动。

    Rails 端只实现了如何确保安全的方式,例如要求用户进行身份验证(在需要时)并将其结果传递给 EBI,以便逻辑可以决定下一步应该做什么。

    EBI demands both sides to be decoupled & independent. It were as you are developing the EBI as a library with a defined API.

    关于ruby-on-rails - 使用 EBC 的架构的实际示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8743937/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com