[原创].NET 分布式架构开发实战之一 故事起源

简介: 原文:[原创].NET 分布式架构开发实战之一 故事起源.NET 分布式架构开发实战之一 故事起源     前言:本系列文章主要讲述一个实实在在的项目开发的过程,主要包含:提出问题,解决问题,架构设计和各个逻辑层的实现以及新问题的出现和代码的重构。
原文: [原创].NET 分布式架构开发实战之一 故事起源

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

 

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

 

  系列文章链接:

 [原创].NET 分布式架构开发实战之一 故事起源

[原创].NET 分布式架构开发实战之二 草稿设计

[原创].NET 分布式架构开发实战之三 数据访问深入一点的思考

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

[原创].NET 分布式架构开发实战五 Framework改进篇

[原创].NET 业务框架开发实战之六 DAL的重构

[原创].NET 业务框架开发实战之七 业务层初步构想

[原创].NET 业务框架开发实战之八 业务层Mapping的选择策略

[原创].NET 业务框架开发实战之九 Mapping属性原理和验证规则的实现策略

[原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(前篇)

[原创].NET 业务框架开发实战之十 第一阶段总结,深入浅出,水到渠成(后篇) 

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

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

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

 

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

 

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

 

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

   

      

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

       数据访问层:

      

 

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

 

      

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

 

       业务层:

 

      

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

 

 

       服务层:

      

       

 

img_405b18b4b6584ae338e0f6ecaf736533.gif 代码
     public   interface  IEmployeeServices
    {
        List
< Employee >  GetAllEmplyees();
    }


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

 

 

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

 

       现在一个最明显的问题就是:把数据层的数据实体Employee一层层的传递,最后到了客户端的UI代码中,而业务层中的EmployeeBL基本上没有起到什么作用,只是起到一个过渡的作用,只是在Insert Update,Delete的时候,对一些字段进行了相应的CheckValidation,如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 分布式架构开发实战之二 草稿设计

 

  欢迎大家参加企业级项目开发团队

 

  版权为小洋和博客园所有,转载请标明出处给作者。

  http://www.cnblogs.com/yanyangtian

 

 

      

 

 

 

目录
相关文章
|
10月前
|
人工智能 Kubernetes 数据可视化
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
本文回顾了一次关键词监测任务在容器集群中失效的全过程,分析了中转IP复用、调度节奏和异常处理等隐性风险,并提出通过解耦架构、动态IP分发和行为模拟优化采集策略,最终实现稳定高效的数据抓取与分析。
188 2
Kubernetes下的分布式采集系统设计与实战:趋势监测失效引发的架构进化
|
12月前
|
消息中间件 运维 Kafka
直播预告|Kafka+Flink双引擎实战:手把手带你搭建分布式实时分析平台!
在数字化转型中,企业亟需从海量数据中快速提取价值并转化为业务增长动力。5月15日19:00-21:00,阿里云三位技术专家将讲解Kafka与Flink的强强联合方案,帮助企业零门槛构建分布式实时分析平台。此组合广泛应用于实时风控、用户行为追踪等场景,具备高吞吐、弹性扩缩容及亚秒级响应优势。直播适合初学者、开发者和数据工程师,参与还有机会领取定制好礼!扫描海报二维码或点击链接预约直播:[https://developer.aliyun.com/live/255088](https://developer.aliyun.com/live/255088)
688 35
直播预告|Kafka+Flink双引擎实战:手把手带你搭建分布式实时分析平台!
|
12月前
|
消息中间件 运维 Kafka
直播预告|Kafka+Flink 双引擎实战:手把手带你搭建分布式实时分析平台!
直播预告|Kafka+Flink 双引擎实战:手把手带你搭建分布式实时分析平台!
326 12
|
7月前
|
缓存 Cloud Native 中间件
《聊聊分布式》从单体到分布式:电商系统架构演进之路
本文系统阐述了电商平台从单体到分布式架构的演进历程,剖析了单体架构的局限性与分布式架构的优势,结合淘宝、京东等真实案例,深入探讨了服务拆分、数据库分片、中间件体系等关键技术实践,并总结了渐进式迁移策略与核心经验,为大型应用架构升级提供了全面参考。
|
人工智能 安全 Java
智慧工地源码,Java语言开发,微服务架构,支持分布式和集群部署,多端覆盖
智慧工地是“互联网+建筑工地”的创新模式,基于物联网、移动互联网、BIM、大数据、人工智能等技术,实现对施工现场人员、设备、材料、安全等环节的智能化管理。其解决方案涵盖数据大屏、移动APP和PC管理端,采用高性能Java微服务架构,支持分布式与集群部署,结合Redis、消息队列等技术确保系统稳定高效。通过大数据驱动决策、物联网实时监测预警及AI智能视频监控,消除数据孤岛,提升项目可控性与安全性。智慧工地提供专家级远程管理服务,助力施工质量和安全管理升级,同时依托可扩展平台、多端应用和丰富设备接口,满足多样化需求,推动建筑行业数字化转型。
406 5
|
7月前
|
人工智能 API 数据库
Semantic Kernel .NET 架构学习指南
本指南系统解析微软Semantic Kernel .NET架构,涵盖核心组件、设计模式与源码结构,结合实战路径与调试技巧,助你从入门到贡献开源,掌握AI编排开发全栈技能。
696 2
|
7月前
|
存储 NoSQL 前端开发
【赵渝强老师】MongoDB的分布式存储架构
MongoDB分片通过将数据分布到多台服务器,实现海量数据的高效存储与读写。其架构包含路由、配置服务器和分片服务器,支持水平扩展,结合复制集保障高可用性,适用于大规模生产环境。
502 1
|
11月前
|
监控 算法 关系型数据库
分布式事务难题终结:Seata+DRDS全局事务一致性架构设计
在分布式系统中,CAP定理限制了可用性、一致性与分区容错的三者兼得,尤其在网络分区时需做出取舍。为应对这一挑战,最终一致性方案成为常见选择。以电商订单系统为例,微服务化后,原本的本地事务演变为跨数据库的分布式事务,暴露出全局锁失效、事务边界模糊及协议差异等问题。本文深入探讨了基于 Seata 与 DRDS 的分布式事务解决方案,涵盖 AT 模式实践、分片策略优化、典型问题处理、性能调优及高级特性实现,结合实际业务场景提供可落地的技术路径与架构设计原则。通过压测验证,该方案在事务延迟、TPS 及失败率等方面均取得显著优化效果。
535 61
|
10月前
|
数据采集 缓存 NoSQL
分布式新闻数据采集系统的同步效率优化实战
本文介绍了一个针对高频新闻站点的分布式爬虫系统优化方案。通过引入异步任务机制、本地缓存池、Redis pipeline 批量写入及身份池策略,系统采集效率提升近两倍,数据同步延迟显著降低,实现了分钟级热点追踪能力,为实时舆情监控与分析提供了高效、稳定的数据支持。
416 1
分布式新闻数据采集系统的同步效率优化实战