我对这个问题有点困惑:分层架构是否有用,没有像DI或Repository这样的设计模式?我不是在谈论直接的DI和存储库模式;他们只是例子。据我所知,我们主要使用分层架构来删除跨层的依赖关系;但是没有使用上面提到的设计模式,我们只是编写对这些层的直接引用。例如,如果我们有一个没有任何设计模式的逻辑层和数据库层,我们会严重耦合每一层。谁能解释一下呢?
答案 0 :(得分:1)
我不知道我是否一定称之为重型耦合。我将使用Java应用程序作为示例。想象一下你的图层如下:
UI -> Business Logic -> Data Access
您的UI层可能包含Java servlet(知道如何显示数据),而您的业务逻辑层包含EJB(知道如何进行业务验证等),您的数据访问层可能会直接使用JDBC连接将数据存储到MySQL中。
您的UI层未与特定验证逻辑耦合,您的业务逻辑层未与特定数据库实现耦合。如果你想用表示层的Swing应用程序来扩展你的JSP,那很简单 - 验证和持久性逻辑是分离的。当然,Swing应用程序必须获得对业务逻辑层入口点的引用,但这很好。如果你想用Postgres替换MySQL,那也没关系 - 你的演示和业务逻辑层不会受到影响。当然,每一层都必须有自己的数据传输对象 - 只要你从UI层一直使用一个DTO直到持久性,任何变化都会一直传播,而这就是你不能做到的事情。想。
当然,如果你使用DI,它可能会使重构更容易,但不使用DI并不会使分层架构的好处失效。即使是处理层之间通信的简单facade也会使重构变得更容易。根据{{3}}来考虑它。
答案 1 :(得分:1)
层架构是层(物理上)分离的软件架构 示例:multi layer,network osi layers
在Java中,如果所有源代码都在一个项目中,则可以使用包名称进行分层,如果您有多个项目,则可以在项目级别定义分层。
依赖注入模式是如何使用"编写针对接口"编写代码的方式。原则,所以没有直接的关系。
答案 2 :(得分:1)
简单回答:是的。
更长的答案:分层架构几乎总是一个优秀开发人员的设计目标,无论他们正在做什么项目(假设一个项目足够大,至少+优秀的开发人员)。
分层架构最基本的概念就是"劳动分工"进入"逻辑单元" ...听起来很像'方法'。从技术上讲,你可以在main方法中的单个类中编写一个完整的10,000行java程序......但显然,将程序细分为包,类和方法是有益的(无论你做出什么其他设计决策)关于类似代码的分组(我在这里非常广泛)。所以多层拱门。只是另一个层次的抽象'协助将申请分成不同的部分。
即使不使用DI等,设计应用程序以使用一组接口来定义不同组件之间的交互,不仅可以帮助您开发不同层的替代实现(这样可以通过一些简单的方法进行更改)用于在最终集成/合并之前进行测试的代码行,但它也将帮助您更好地精心设计项目。这更像是一种体验'事情,但有一个像mutli-layers这样的好指南可以帮助你更快地决定哪些部分应该成为哪些层的一部分等。
当您合并每个人的代码时,它还可以帮助您分割工作量并减少问题数量。例如,在我的本科软件工程课程中,我们设计了一个3层程序,我们使用ui,逻辑,存储作为我们的3层,除了定义代码的3个部分之外,我们然后能够在工作组之间划分工作量并最终组合我们的不同部分有0麻烦。
答案 3 :(得分:1)
看看你的问题,我假设您在询问3层分层架构(数据库|业务逻辑| UI)。我首先列出你的问题和想法,然后强调整体情况。
(1)分层架构在没有任何设计模式的情况下是否有用?
(2)我们主要使用分层架构来删除跨越的依赖关系 层。
(3)但是没有使用上面提到的设计模式,我们只是编码 直接引用这些图层。
(4)没有任何设计模式,我们严重耦合每一层。
以上[(1)& (2)]和[(3)& (4)]彼此相关。
我先谈谈(1)& (2)。简单地说,分层架构将我们的应用程序组成3个 隔离的 层。它解决了 系统级 问题。一些优势,我们遵循洛杉矶
如果我谈论(3)& (4),设计模式只是 问题解决方案 对,我们经常参与其中。因此,它描述了 一般问题 的答案。与分层架构不同,设计模式可以解决 类级别 。
我在你的描述中注意到的一件事是你相信不使用设计模式会导致错误的代码。实际上并非如此。相反,如果我们以错误的方式添加设计模式,我们最终会创建一个反模式并且会遭受高速时间。正如我所说,这是一个普遍问题的答案,但是你的实际问题对于你的系统来说是非常具体的问题。那么你可以将那个普通的那个定制成具体的东西真的很重要。简单来说,如果您善于利用基本的OOP原则并善于保持简单,那么您可能根本不需要设计模式。并且您在代码中使用了设计模式并不一定声称您拥有可靠的代码( 不 声称设计模式是一个糟糕的概念)。事实上,有一些设计模式一般不是很好。而且也有非常好的。
作为您主要问题的直接答案。那两个并没有多少相互关联。我同意有一点。但更重要的是,它们是针对不同背景的两种不同的东西。 :))