问题标签 [clean-architecture]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1384 浏览

java - 如何在 Clean 架构中从 Presenter 调用 Activity 方法?

我正在开发一个使用干净架构的应用程序。在演示者中,当涉及到方法 onCompleted 时,我必须从 Main 活动中调用函数。这是我的主持人:

这是我必须调用的 MainActivity 函数:

有人可以帮助我如何在 Presenter 中将此函数调用到我的 onCompleted 方法中吗?提前致谢。

0 投票
1 回答
112 浏览

php - 我应该指挥什么对象?

我按照六边形架构编写系统。

我在 UseCase 中有异步命令和同步查询对象。

我的 src 文件夹如下所示:

我的问题是:我可以/应该使用什么来通过构造函数中的命令发送数据UseCase\Command\CreateTask\CreateTaskCommand

  • \Entity\Task
  • 创建UseCase\Command\CreateTask\Request\Task将包含所有需要的数据
  • 只有字符串/整数/浮点数

这是显示问题的简单示例。

现在我正在使用域中的对象(Entiti\Task等)在实际情况下,我有UseCase\Command\CreateProcess这个需要

  • 用户界面
  • 实例[id,名称]
  • 来源[node_id,node_name,leaf_id,leaf_name]
  • Resource[id,name,type 等普通类型 Person[name,lastname]]

通过遵循 DDD,Process 是我的聚合。所有实体仅因构造 Process(Node,Leaf,Resource,Person) 而存在。然后我不想要单独的方式来创建其他实体,因为这种方式适用于我的业务逻辑。

由于这个问题,问题是:我应该选择什么?打破一些规则?

问题:

  • 将命令与域内部的对象绑定,将更高层更多地绑定到核心。核心的任何变化,都会与所有层发生连锁反应
  • 创建Request\*让我有很多课程,但使用命令的方式清晰,还有更多的工作 - unitTest 等。
  • 仅使用标准类型(int、string 等)将使 __counstruct 具有 20 个参数。我不想要多级数组,因为不会清楚使用这个命令。

感谢帮助。

0 投票
0 回答
63 浏览

java - 您如何定义功能的范围?

我目前一直在阅读 Java/Android 的Clean 架构,我非常喜欢这种方法。

通过这些文章,每个人都很好地解释了您的应用程序应该如何从高级角度(Presentation/Domain/Data)构建,他们似乎都建议按功能打包,但我发现有关实际目录结构的信息非常缺乏.

例如,如果我们采用经典的 TODO 应用程序:

TODO 应用示例

如何定义功能的范围?我应该在哪个包中放置我的基本/核心组件,例如 fe 执行器?

0 投票
1 回答
2271 浏览

clean-architecture - 清洁架构,用例依赖

最近,我找到了Bob 叔叔的 The Clean Architecture帖子。但是当我试图将它应用到当前项目时,当一个用例需要依赖另一个用例时,我陷入了困境。

例如,我的领域模型是目标和任务。一个目标可以有多个任务。当我更新一个任务时,它需要更新其父目标的信息。换句话说,用UpdateTask例将用UpdateGoal例作为依赖。我不确定这是否可以接受,或者我们是否应该避免用例级别的依赖。

0 投票
0 回答
308 浏览

java - 如何在单个演示者中使用多个 UseCase

考虑带有额外用例的 Instagram 应用

  • 从 api 获取帖子
  • 喜欢帖子
  • 旗杆
  • 书签帖子
  • 评论帖

所以我有一个视图(片段)和一个演示者

我使用干净的架构,那么实现演示者和用例的最佳方式是什么?!

  1. 在一个演示者中注入多个用例
  2. 在一个用例中混合多个用例并将其注入演示者
0 投票
2 回答
3047 浏览

controller - 清洁架构中的控制器

我正在尝试在 Laravel 应用程序中应用 Bob 叔叔的Clean Architecture

我关心的是:正如鲍勃叔叔所描述的,控制器应该属于第三个圈子:接口适配器(从内到外)。这意味着控制器仅依赖于用例圈(第 2 圈),并且不应该对第 4 圈中的框架一无所知。

但是有些框架中的控制器必须扩展一个基类(例如,一个 AbstractController 类),它还需要接收一个 Request 对象,有时还需要返回一个 Response 对象,所以这有点打破了Clean Architecture 的依赖规则,因为它知道外圈的框架。

我误解了吗?如果没有,是否有任何解决方案可以不破坏依赖规则

我的控制器看起来像这样:

0 投票
2 回答
1115 浏览

database - 清洁架构:框架之间的序列流

我一直在尝试从博客、文章和视频中了解更多关于 Bob 叔叔的清洁架构的信息。

如果我要在这个架构中使用数据库,那么 UI(作为 Web 或表单等框架)应该了解数据库的哪些信息?或者更一般地说,数据应该如何在同一层中的两个或多个片段/部分之间流动?

例如,UI 将与我的适配器/网关对话以与业务实体交互。对于读/写,我可以看到 UI 可以调用任何可以访问数据库并传入适配器/网关的类/类,以便它可以与业务实体交互。

许多文章与这篇文章几乎没有什么不同(https://subvisual.co/blog/posts/20-clean-architecture)。我还没有找到一篇很好的文章来介绍同一层中的各个部分应该如何相互协作。因此,提及该问题的文章将是一个可以接受的答案。

这似乎没有违反依赖规则,但感觉就像我做的不对,因为我在我的 UI 和数据库之间建立了依赖关系。我相信我可能过度思考了这个概念,并且我相信这可能来自于学习三层架构(UI -> BLL -> DAL)。

0 投票
2 回答
2202 浏览

android - 如何在 Android 的模型层中使用 SharedPreferences 和 Context?

我正在使用干净的架构,模型层有一个存储库、一个改造接口和一个实现存储库并创建改造服务的类。我正在使用这个例子:https ://github.com/saulmm/Avengers

以下是课程: 改造 api 服务

存储库

和其余数据源类:

我的问题是在构造函数中我使用 SharedPrefences 的最后一个类中,但我收到一个错误,因为我无法使用 android 上下文或 SharedPreferences 来获取保存的访问令牌,因为它是模型层。如何解决此问题,以便我可以在不使用任何 com.android 类的情况下使用模型层的访问令牌?

0 投票
2 回答
305 浏览

c# - 使用DDD架构时是否允许在应用层使用JsonProperty属性?

我在 Pluralsight 上学习了一些关于清洁架构和领域驱动设计的课程。在等待 Eric Evan 关于 DDD 的书到来时,我遇到了以下情况和问题:

我正在建立一个新项目。我添加了以下项目:

  • 我的项目应用程序
  • 我的项目.Common
  • 我的项目.域
  • MyProject.Infrastructure
  • 我的项目持久性
  • 我的项目.WebApi

一个业务需求是让 WebApi 返回一个具有以下属性的模型:

  • 不符合我的命名约定;
  • 很丑。

该模型位于 MyProject.Application 项目中。例如:

通常我会在这些模型上应用 JsonPropery 属性以使其保持良好状态:

但是,后来我想了想……对自己说:应用层不应该关心“事物”是如何呈现的。这是表示层的任务,在本例中为 WebApi。

这个对吗?应用程序层是否应该返回一个正常的模型并让 WebApi 将其转换/转换为业务所需的任何(丑陋的)表示形式。

提前谢谢了。

0 投票
1 回答
1032 浏览

android - Android CleanArchitecture Domain 模块和 AutoValue

我想在一个新的应用程序中使用干净的架构,到目前为止它工作得很好。我将应用程序分为 3 个模块(演示文稿、数据和域),如下例所示:Android-CleanArchitecture

我的域模块中有一些实体。其中之一是用户。

我想使用带有一些扩展的 AutoValue 来摆脱样板代码。其中一个扩展是AutoValue Parcel。现在我需要实现 android.os.Parceable 接口,它是 android 的一部分,不能在我的域模块中使用,因为它是一个 Android 依赖项。

实现这一点的正确方法是什么?