业务层
Martin Fowler说过:“任何人都可以写出计算机才能理解的代码,只有写出人能理解的代码的程序员才是好程序员。”
每一个复杂的软件都应该按层来组织。每一层代表系统的一个逻辑部件。尤其是,业务层的模块包括了所有使得系统运行的时候和其它层交互所需要的功能算法和计算,其他层包括数据访问层DAL和表现层。
业务层是任何分层系统的神经中心,包含了大部分的核心逻辑。因为这个原因,它也经常被叫做:业务逻辑层BLL。
1、业务逻辑层是什么
抽象的讲,业务逻辑层是系统的一部分,用来处理和业务相关的任务。本质上,业务逻辑层包括一系列执行数据的操作。数据被模型化为问题域的实体,例如:发票、用户、订单、清单。另一方面,包括一些操作,例如:创建一个发票,添加一个用户,处理一个订单。
2、剖析业务层
如果你从纵向来看业务逻辑层,你会发现一些业务模型的实体,表达用户策略和需求的业务规则,实现自动化功能的服务,定义文档和数据从一层流转到一层的工作流。
安全是一个在所有层都需要考虑的严重问题,但是在业务逻辑层,代码扮演一个用户界面层的守门人。在业务逻辑层的安全是以角色为基础的,或者是限制对业务对象的访问,只对授权用户开放。
2.1、领域对象模型
领域对象模型更倾向于对整个系统提供一个结构化的视图,包括实体的功能描述,实体间的关系,实体的职责。模型产生于用户需求,使用UML的用例图和类图进行文档化。在模型中,你表示出用来存储数据和暴露操作的真实世界元素。每一个实体代表模型中的一个角色,提供一些行为。每个实体都有自己的职责,依据领域的关系进行交互。
很多应用被打上复杂的标记,实际上,如果你看到最终的技术实现,你会发现是相对简单的。但是,整体来看这个应用是复杂的,那是因为领域内在的复杂性。通常来说,困难在于构建一个适当的软件模型,而不是最终的实现。一个设计良好的模型,无论你运行到哪里,可以解决任何难度的复杂性。
对象模型和领域模型
为了清晰起见,让我们确定一下“对象模型”和“领域模型”这两个词。尽管我们经常会交替使用,实际上他们代表不同的事物,就算代表同一个事物的时候,他们的抽象级别也是不同的。我们所谓的“对象模型”就是简单的对象图。对于如何设计和实现模型没有限制。如果你有了一些相互关联的类,就有了一个对象模型。就像你看到的,描述相当通用,适用于大部分的解决方案。
我们所谓的“领域模型”就是另外一回事了。领域模型是用来满足一系列需求的对象模型。典型的,领域模型中的类没有持久层的概念,是一种与其他帮助类库中的类没有关系的理想状态。另外,领域模型设计用来解决特定的领域问题,试图从实体和它们之间的关系来抽象业务流程和数据流。
记住领域模型也是一种特殊的设计模式,在后面我们会讨论。
2.2 领域实体
从外部来看,业务逻辑层就是对业务对象的一系列操作。大多数情况,一个业务对象就是一个领域实体的实现,也就是一个封装了数据和行为的类。也可能是一些实现特殊计算的辅助类。业务逻辑层决定业务对象之间如何交互。它也为参与交互的模块、业务对象强加了一些规则和流程。
业务逻辑层处在一个分层系统的中间,和表现层、数据访问层交换信息。业务逻辑层的输入和输出不是非要业务对象不可。在大多数情况,架构师更倾向于在跨层之间使用DTO(Data Transfer Objects)进行数据传输。
业务对象和数据传输对象有什么不同呢?
业务对象包含数据和行为,在业务逻辑中可以看做是充血的活动对象。数据传输对象只是一个值对象,是包含数据没有附加的行为。处于序列化的目的,在业务对象中存储的数据需要被序列化到数据传输对象中。数据传输对象除了setter和getter以外没有逻辑行为。在模型中,每一个领域实体类可能会对应多个数据传输对象。为什么是多个数据传输对象呢?
一个数据传输对象不是一个无行为的领域对象的简单副本。相反,一个数据传输对象代表一个在特定上下文环境使用的领域对象的子集。例如:在一个方法中,你需要一个只有Name和ID的CustomerDTO;其他地方你可能需要一个有Name、ID、Country、Contract的CustomerDTO。通常来说,一个领域对象是一个包含很多对象的图,例如:Customer包含orders,orderdetails,等等。
重点
关于DTO和OB的协同使用,可以引出一大串的、无意义的争论。理论建议在任何情况下都是用DTO来减少层之间的耦合。实践中,经常会提醒我们已经够复杂的了,尽量避免不必要的附加东西。作为一条实践的准则,我们建议在处理少于100个业务对象的模型的时候,你不需要这么做。在这些情况下,DTO和OB很可能很相似。
2.3 业务规则
在现实世界中的组织都是基于一系列的业务规则组成的。你可以争论这些规则的级别,但是不可以否认这些规则的存在。每一个组织都有追求的战略,规则是实现战略的主要规范。战略指明了要达到的高度,规则明确了如何达到这个高度。
规范业务规则有各种方式。如果你生活和工作在一个完美的世界,每一个组织维护他自己的规则数据库,这样在一个项目中的各个团队中就很容易共享这些规则。大多数情况不是这样的,搜集业务规格的过程开始于开发项目。结果就是,业务规则在项目快要结束的时候才整理出来,而且是在架构师之间共享。
依赖于进行操作的上下文环境,业务规则不是固定的,是变化的。这就意味着在业务逻辑层中,应该以一种灵活的方式实现规则,最好是通过规则引擎实现。在最高级别的抽象中,规则引擎是软件的一部分,以某种规范引入规则,并且应用于业务对象。
在实际中,业务规则通常就是一系列的if。。。else。。。语句,映射为业务对象的操作,也就是所谓的业务逻辑。
在实际的系统中,一个的业务对象可能会映射出上千条规则。你的规则引擎应该足够灵活,以适应可能的变化以及修复一些误解。
2.4 验证
业务对象的属性来自于实体的属性。业务对象的方法来自于自己的一系列职责。
未完待续。。。。。。。。。。。。。。。。。。。。。。。。。。。
分享到:
相关推荐
8. **部署和调试**:最后,笔记可能涵盖了解决方案的发布和部署过程,以及如何使用Visual Studio进行调试。 以上内容只是根据文件名推测的可能知识点,具体的学习笔记将更详细地阐述每个主题,并可能包含示例代码和...
总之,ASP.NET为Web开发提供了全面的解决方案,从简单的静态页面到复杂的Web应用,都能通过其强大的功能和灵活的架构得以实现。通过深入学习和实践,开发者可以利用ASP.NET创建出高效、稳定、易于维护的Web应用程序...
本资源集合是针对ASP.NET的学习笔记,旨在全面深入地讲解这个强大的技术。 在ASP.NET中,Web应用程序是由服务器端控件、页面生命周期、事件模型以及丰富的编程模型构成的。通过使用ASP.NET,开发者可以使用C#或VB...
ASP.NET是建立在.NET Framework之上的,这是一个全面的软件开发框架,包含运行时环境、类库和编译器,为开发者提供了一站式解决方案。 3. **Web Forms** ASP.NET Web Forms是ASP.NET的最初形式,它引入了控件模型...
个人学习笔记可能涵盖了对这些主题的深入理解和实践体会,包括遇到的问题、解决策略以及一些实用技巧。通过阅读这些笔记,你可以了解作者在学习过程中如何理解和应用这些概念,以及如何解决实际开发中的问题。 总之...
- `.sln`:解决方案文件。 - `.csproj`:项目文件。 - 控制台操作: - `Console.WriteLine("提示信息");`:输出一行文本。 - `Console.ReadKey();`:等待用户按键。 - 编写 C# 代码时,每条语句后都需要分号 `;`...
总的来说,VB.NET图书管理系统结合了VB.NET的强大编程能力与Sql Server 2005的高效数据管理,为图书馆的日常运营提供了智能化解决方案。通过学习和实践此类项目,开发者不仅可以提升VB.NET编程技能,还能深入理解...
- `hichoose.sln` 和 `hichoose.suo` 是Visual Studio的解决方案文件和用户选项文件,用于项目管理和开发环境的设置。 - `jb51.net.txt` 可能是开发者的笔记或者参考资料链接,可能包含了一些开发过程中参考的网站...
"使用Access库"则意味着它依赖于Microsoft的Access数据库管理系统,这是一个轻量级的数据库解决方案,特别适合小型应用和初学者使用。由于Access数据库易于操作和管理,因此这个留言板系统对于不熟悉复杂数据库管理...
ASP.NET Core Web API 学习笔记汇总.pdf 是一个聚焦于使用ASP.NET Core构建Web ...这份学习笔记汇总可能会涵盖这些知识点的实例、最佳实践以及常见问题解决方案,对于深入理解和应用ASP.NET Core Web API开发大有裨益。
《Visual C++程序设计学习笔记》是一份深入探讨C++编程在Microsoft Visual Studio环境下的实践指南。这份笔记涵盖了从基础知识到高级技术的广泛内容,旨在帮助读者熟练掌握Visual C++的使用,提升软件开发能力。 一...
Price是一位专注于C#和微软Azure解决方案架构的专业人士,拥有超过20年的行业经验。本书旨在帮助读者利用ASP.NET Core 6、Blazor和EF Core 6,结合Visual Studio 2022和Visual Studio Code进行现代跨平台应用、网站...
通过学习和实践这样的项目,开发者能够掌握完整的Web应用开发流程,对数据库操作、三层架构设计模式有深入的理解,并且能够熟练使用C#编程语言。对于初学者来说,这是一个很好的学习案例,而对于专业人士,它可以...
在这个课程中,我们将深入探讨ASP.NET的基础概念、核心技术和实际应用,以及在构建酒店管理系统时可能遇到的问题和解决方案。 首先,ASP.NET是微软公司推出的一种用于构建Web应用程序的框架,它基于.NET Framework...
总的来说,.NET订餐网源码不仅是一个完整的餐饮电商解决方案,也是一个学习.NET开发、Web应用架构、数据库设计和管理的宝贵资源。通过深入研究,开发者可以掌握更多的技能,进一步提升在IT行业的专业能力。
10. **Azure云计算**:Microsoft Azure提供了丰富的云服务,包括存储、计算、数据库等,.NET开发者可以利用Azure SDK构建云端解决方案。 11. **设计模式**:了解常见的设计模式,如单例、工厂、观察者等,它们是...
c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...
通过研究这个学生论坛系统的源码,学习者可以深入了解ASP.NET的Web开发流程,如何利用ASP.NET MVC或者Web Forms架构来构建一个完整的Web应用,以及如何处理用户认证、授权、数据访问和错误处理等问题。同时,这也是...
随着经验的积累,开发者会逐渐理解如何优化性能、处理复杂布局、实现动画效果,以及如何与其他.NET技术如MVVM(Model-View-ViewModel)架构模式结合使用。 **WPF笔记** 是个人学习过程中不可或缺的一部分,它们可以...