.NET分布“.NET研究”式架构开发实战之一 故事起源

简介:   前言:  本系列文章主要讲述一个实实在在的项目开发的过程,主要包含:提出问题,解决问题,架构设计和各个逻辑层的实现以及新问题的出现和代码的重构。本系列文章以故事的形式展开,而且文章列举的很多项目的名称,大家也不用太关心,很多都是虚拟的。

  前言:

  本系列文章主要讲述一个实实在在的项目开发的过程,主要包含:提出问题,解决问题,架构设计和各个逻辑层的实现以及新问题的出现和代码的重构。本系列文章以故事的形式展开,而且文章列举的很多项目的名称,大家也不用太关心,很多都是虚拟的。

  本篇主要讲述项目的一些背景

  新人Rich上海闵行企业网站制作ard被分配到了一个企业自动化信息管理项目组--Automation Information Management Project(后面简称AIM),当Richard进入项目组的时候,这个项目已经开始了,项目的架构也已经在两周之前构建好了--SOA架构,而且使用的主要技术也敲定了:WCF, Linq.

  注:因为项目是首次采用新技术(因为以前没有使用WCF,Linq,所以被称为新技术),项目就这样开始进行了。

半年之后问题就开始出现了(其实问题就一开始就出现了,只是大家还认为问题不大):因为当初在设计的时候,项目的架构是由项目组的其他两个人设计的,整个项目开发基本上就没有采用面向对象的思想来开发,而且虽然在架构设计上分了:数据层,业务层,服务层,和UI层,但是各层之前是紧紧的耦合,可以说是牵一发而动全身:如数据访问层上海企业网站制作稍微一改,业务层就跟着动,然后改变一层层上海企业网站设计与制作的开始波及。

  大家都开始觉得这样很累,但是项目已经做到这个阶段了,不可能重来。每次新需求一来,项目的的改动可以说是天翻地覆。而且当初设计架构的那位仁兄也就项目一开始的一个月后就走了。

  下面的图就展示项目中的架构设计:

  咋一看起来还是不错的,一般的架构都是这样设计的。下面就开始讲述它们之间的一些调用关系,看看有什么问题:

数据访问层:

 
 
public class EmployeeDAL
{
public List < Employee > GetAllEmplyees()
{
// ...
}
}

  其中Employee就是Linq生成的一个实体对象。

  业务层:

代码

 
 
public class EmployeeBL
{
public List < Employee > GetAllEmplyees()
{
EmployeeDAL employeeDAL
= new EmployeeDAL();
return employeeDAL.GetAllEmplyees();
}
}

  服务层:

代码

 
 
public interface IEmployeeServices
{
List
< Employee &g上海徐汇企业网站设计与制作t; GetAllEmplyees();
}


public class EmployeeServices : IEmployeeServices
{
public List < Employee > GetAllEmplyees()
{
EmployeeBL employeeBL
= new EmployeeBL();
return employeeBL.GetAllEmplyees();
}
}

  然后就是在客户端生成代理,然后在UI中就调用了提供的方法。

  客户端的UI代码中,而业务层中的EmployeeBL基本上没有起到什么作用,只是起到一个过渡的作用,只是在Insert ,Update,和Delete的时候,对一些字段进行了相应的Check和Validation,如Email格式是否正确等等。其他的一些流程的Check也是代码的堆积,业务类很弱。

  总的看起来就是牵一发而动全身的效果。

  而且在开发过程,分层的好处基本没有体现出来。

  在业务类的设计的时候,所有的业务类都显得比较的弱,之所以这么说,主要是基于这样的一个思想:

  都知道,在面向对象设计的过程中,每个类就好比一个人,实例化一个类就好比生成了一个人,这个人可以在一出生就具备很多的能力(天生秉异),如异常处理,日志跟踪,缓存,通用的验证机制等等;也可以一出生什么都不会(或者只会做最基本的几件事情)。之前的业务类实例化之后就生成一个非常普通的人。每个类都得重写很多的基础代码,说到通用那就只是copy代码。如果想要使得新生成的类很强大,具备很多功能,在设计的时候可以让这些类继承一个功能比较强大的基类。当然继承只是实现方式的一种。

  现在Richard已经被分到了另外的一个项目组(也是本系列文章要讲述的一个项目,就称为项目进度管理系统—Project Process Management(PPM)),而且担任了架构的设计和开发(之前的架构设计Richard没有发言权)。有了前车之鉴,在新项目开发之前的几个月,Ricahrd首先就开始了通用架构的设计,目的有两个:

  1.解决之前项目的问题:不灵活,不通用,每次都做重复性的事情等。

  2.结合自己的考虑,开发一个Framework,使得开发更加的快速,灵活,强大。

  其实在项目真正开始了之后,不可能给你几个月的时间去设计架构的。其实在AIM出现问题之后,Richard就已经在构思如果开发一个通用的Framework了(通用--不表示就是到处可用,因为公司的一直是开发某一领域软件的,比如现在的公司就擅长开发企业管理的一些软件,所以开发出一个基于领域模型的架构和框架还是有可能的)。Richard也想挽救AIM,由于诸多原因,想法终究只是成了想法。

  在从AIM项目出来之后,Richard又开始了另外的一个项目的开发,名称我们暂时就虚拟的称为EMS(Employee Management System),EMS项目不是很大,公司解决让Richard一个人开发这个项目。这个项目给了Richard很多的时间来考虑架构设计和Framework设计的时间,因为EMS项目不是很复杂,而且技术和进度都在掌控之中,在正常上班时间就可以到时候定期交付。所以每天下班之后,Richard开始加班去构思Framework的设计,开发的时间越长,技术就应该沉淀的越多,如以通用类库,组件的方式或者解决问题方案的文档等出现。只有这样,下次的开发才更加的快速。

  3个月下来,EMS项目完成了。而且Richard设计的Framework也有了雏形。准确的说,还只能称为 基础架构基本完成。EMS没有采用这个Framework来开发,因为Framework的设计和实现于EMS是同步进行的。

  Richard心里是这样认为的:设计通用的架构,然后在项目中不断的锤炼,更新,产生出通用的代码,然后演化为Framework。只有设计出了自己的Framework,以后的开发才有可能进入光速开发。

  在这个项目开始之初,Richard就和其他几个组员讨论了如何实现,同时也推出了自己开发的成果。商量之后,决定采用Richard的设计。

  Richard在设计架构的时候,也参考了现在流行的一个Framework,如Spring.NET ,CSLA.NET, Nhibernate,主要吸收它们的一些思想,同时也分析了这些Framework对自己项目的利弊。而且认为:没有绝对万能的技术,一个架构的实现需要在很多的因素之间权衡,技术不是用来show的,而是用来解决问题,这就是技术的价值。

本系列文章就展示整个构思,设计,实现的过程。本系列文章所要开发的项目的价值可能不大,本系列文章的价值在于架构的思考和设计过程,一步步的演化过程。

  相关文章:.NET 分布式架构开发实战之二 草稿设计

   &nbs上海闵行企业网站设计与制作p;                .NET 分布式架构开发实战之三 数据访问深入一点的思考

                    .NET 分布式架构开发实战之四 构建从理想和实现之间的桥梁(前篇)

目录
相关文章
|
27天前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
86 3
|
8天前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
43 4
|
21天前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
30 1
|
1天前
|
消息中间件 开发框架 .NET
.NET 8 强大功能 IHostedService 与 BackgroundService 实战
【11月更文挑战第7天】本文介绍了 ASP.NET Core 中的 `IHostedService` 和 `BackgroundService` 接口及其用途。`IHostedService` 定义了 `StartAsync` 和 `StopAsync` 方法,用于在应用启动和停止时执行异步操作,适用于资源初始化和清理等任务。`BackgroundService` 是 `IHostedService` 的抽象实现,简化了后台任务的编写,通过 `ExecuteAsync` 方法实现长时间运行的任务逻辑。文章还提供了创建和注册这两个服务的实战步骤,帮助开发者在实际项目中应用这些功能。
|
27天前
|
开发框架 NoSQL MongoDB
C#/.NET/.NET Core开发实战教程集合
C#/.NET/.NET Core开发实战教程集合
|
27天前
|
C# Windows
一款基于.NET开发的简易高效的文件转换器
一款基于.NET开发的简易高效的文件转换器
|
27天前
|
开发框架 缓存 前端开发
WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!
WaterCloud:一套基于.NET 8.0 + LayUI的快速开发框架,完全开源免费!
|
8天前
|
弹性计算 Kubernetes Cloud Native
云原生架构下的微服务设计原则与实践####
本文深入探讨了在云原生环境中,微服务架构的设计原则、关键技术及实践案例。通过剖析传统单体架构面临的挑战,引出微服务作为解决方案的优势,并详细阐述了微服务设计的几大核心原则:单一职责、独立部署、弹性伸缩和服务自治。文章还介绍了容器化技术、Kubernetes等云原生工具如何助力微服务的高效实施,并通过一个实际项目案例,展示了从服务拆分到持续集成/持续部署(CI/CD)流程的完整实现路径,为读者提供了宝贵的实践经验和启发。 ####
|
5天前
|
监控 安全 应用服务中间件
微服务架构下的API网关设计策略与实践####
本文深入探讨了在微服务架构下,API网关作为系统统一入口点的设计策略、实现细节及其在实际应用中的最佳实践。不同于传统的摘要概述,本部分将直接以一段精简的代码示例作为引子,展示一个基于NGINX的简单API网关配置片段,随后引出文章的核心内容,旨在通过具体实例激发读者兴趣,快速理解API网关在微服务架构中的关键作用及实现方式。 ```nginx server { listen 80; server_name api.example.com; location / { proxy_pass http://backend_service:5000;
|
7天前
|
缓存 监控 API
探索微服务架构中的API网关模式
随着微服务架构的兴起,API网关成为管理和服务间交互的关键组件。本文通过在线零售公司的案例,探讨了API网关在路由管理、认证授权、限流缓存、日志监控和协议转换等方面的优势,并详细介绍了使用Kong实现API网关的具体步骤。
24 3
下一篇
无影云桌面