我正在阅读干净的架构,我想把它应用到我写的一些软件中。在这个软件中,像User和Group这样的实体扮演着非常核心的角色。出于这个原因,为了避免重复,在代码中共享这些实体是有意义的,但这在某种程度上也违反了干净架构的规则。
在这种情况下,应该做出什么正确的决定?我是否应该在core中抛出"shared/entities“文件夹
我正在做的项目主要是在flutter中编程,如果这对答案很重要的话。
发布于 2021-06-21 07:09:03
我对Flutter或Dart一无所知(除了我刚刚搜索过的),但看起来它支持接口。
一种好的方法不是将用户和组放到共享文件夹中,而是创建它们的一些真正轻量级的表示,并将它们放入共享文件夹/公共库中。接口是一种很好的方法,因为在接口中,您可以指定应用程序的某些部分通常需要了解的重要基础知识,而无需添加特定于实现的负担和依赖关系。
在设计你的界面时,一定要注意像SOLID这样的原则--尤其是Interface segregation principle (SOLID中的i)。
更详细地说:
IUser接口User类通过某种方式使用您的实现来实例化IUser,如User.User -将其切换为使用Have响应评论的更新
我通常的出发点架构是定义DTO,我在应用程序的所有层(UI、业务逻辑/数据访问)中共享这些DTO,基本上就像我认为您所建议的那样。对我来说,DTO是尽可能轻量级的--基本上是信息载体。这些是按照clean architecture在所有层中共享的,因此体系结构的不同层(例如,业务逻辑和数据访问)不会彼此紧密耦合。
然而,用户可能是一个特殊情况,因为他们可以拥有与安全/身份/凭证相关的东西,这些东西可以变得非常专门化和/或特定于实现和技术。我怀疑,这就是@duffymo关于紧密耦合的评论的部分原因。
对于我的回答,我基本上是说,是的,你可以把DTO放在一个通用的文件夹中--和对于棘手的情况(比如用户),你总是可以选择在它们上面定义接口……例如,用户DTO可能具有属性,这些属性是接口而不是具体属性。
class UserInfo
{
string FirstName { get; set; }
string LastName { get; set; }
ITaxData TaxData { get; set; }
}我承认这是完全有可能的,我用“(一些) DTO属性作为接口”的想法把事情复杂化了。
https://stackoverflow.com/questions/68055682
复制相似问题