首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >架构:如何创建多层的原则

架构:如何创建多层的原则
EN

Stack Overflow用户
提问于 2011-12-01 12:12:10
回答 3查看 944关注 0票数 1

正如我们所知,几乎每个复杂的架构都包含多个层。在管理系统中,我们可以很容易地提出数据访问层、业务逻辑层和表示层,而不需要太多的思考。我想知道如何创建多个层是否有明确的原则。PS:它并不局限于管理系统。

EN

回答 3

Stack Overflow用户

发布于 2011-12-01 12:40:01

在软件工程中,当设计系统时,你必须遵守某些设计原则。如果你做得对,这些层就会自动出现。其中一些原则是:

  1. Open/Closed
  2. Single Responsibility
  3. Interface Segregation
  4. The Release Reuse Equivalency
  5. The Common Closure

还有其他的。你可以在网上读到关于它们的文章,也可以买到罗伯特·马丁写的书"Agile Software Development, Principles, Patterns, and Practices“。

这是本书中relavent chapter的链接。

票数 1
EN

Stack Overflow用户

发布于 2011-12-02 18:16:57

我相信,主要的分层原则是Separation of Concerns。它实际上并不局限于面向对象的设计,而是软件工程范围内的(wikipedia文章提供了堆栈协议作为示例)。

因此,我们通常会找到功能领域(F1、F2、F3),并强迫自己设计只完成其中一个功能领域的组件。我们问“X是做什么的”?如果答案是"F1,F2,F3",我们将X划分为X1,X2,X3,它们各自执行一个函数,但也做得很好。

这只是一个简短而夸张的例子

代码语言:javascript
复制
class SomeBusinessObject //Business logic, as we think
{
    bool HasAccess(User loggedInUser)
    {
           /* two lines below are clearly from DataAccess layer */
           string q = "select 1 from user_roles where id={0} and isadmin=1";
           bool hasAccess = DataAccess.Execure(q).Rows > 0;
           if(!hasAccess)
           {
                /* message pre-formatting is Presentation layer concern */
                var msg = string.Format("<b>You don't have access</b>";
                throw new SecurityException(msg);
           }
           return true;
    }
}

在上面的示例中,我们的BL类应该知道数据模型和数据访问细节;它还尝试为基于html的UI预先格式化消息。因此,我们可能会将格式转换为视图,并将sql查询生成提取为DAL。

一般来说,可能有以下几层:

  1. 表示层
    • UI渲染层(通常为views)
    • Presentation logic (presenters/controllers)

  1. 服务层(在相对较小的systems)
  2. Business逻辑中可以省略。如果我们想要对其进行分层,我们可能会考虑以下内容:
    • 业务规则transformation
    • Query services

本身。

  • Data Data

  1. 数据访问。可以分为两层:
    • 抽象数据访问服务业务层
    • 精确实现下面的"DB“two

一般来说,有两个层关系规则:

  1. 层应该只与底层“对话”。(例如,不应该存在从BL到Presentation的依赖,或者从DAL到BL的依赖)。
  2. 层不应该“跳过”一个层。(演示文稿不应与DAL对话)。

然而,也有一些横切特征并没有真正绑定到任何层。这对于日志、缓存等来说是最正确的。一些人也可以说是关于安全性的,但我非常确定它可以以特定于层的方式来完成。

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2011-12-02 22:01:58

分层架构风格意味着调用层次结构。对于被认为是一个单独的层的东西,它与其他层的通信模式应该受到限制。层向其上的层提供功能,并从上面的层使用功能。在纯分层系统中,一层只能看到层次结构中的一个步骤(例如TCP/IP协议体系结构)。

分层的优势包括增加松散耦合和不同层的可演进性。层的主要缺点是增加延迟和复制数据(从一个层传递到另一个层)-因此在决定选择新的层时,必须考虑松散耦合和增加的延迟

除此之外,您应该注意层和层之间的区别-或者总是驻留在同一台机器上的层(层)和边界跨机器的层(层)。当这些层是分布式的时,您需要关注的不仅仅是延迟(请参阅fallacies of distributed computing),因此您应该有一个很好的理由来添加层

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8336449

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档