从架构设计到Mondrian
Mondrian入门介绍之schema-manager
Mondrian入门介绍之schema manager
1 olap基本概念
联机分析处理(On Line Analytical Proccessing,简称OLAP) 概念最早由关系数据库之父
E.F.Codd于1993年提出。OLAP应用是目前数据仓库上的重要应用之一,是决策分析的关键。作为数据仓库最重要的多维分析工具,OLAP利用存储在数据仓库中的数据完成各种分析操作,并以直观易懂的形式将分析结果返回给决策人员。它的目标是满足决策支持或多维环境特定的查询和报表需求,技术核心是多维分析。OLAP具有灵活的分析功能、直观的数据操作和分析结果可视化表示等突出优点,从而使用户对大量复杂数据的分析变得轻松而高效,以利于迅速做出正确的判断,辅助决策。
相比于传统的OLTP(联机事务处理),OLAP定义了多维模型的概念辅助分析操作:
图 1
如图1所示,这是由三个维度构成的一个OLAP立方体,立方体中包含了满足条件的cell(子立方)值,这些cell里面包含了要分析的数据,称之为度量值。显而易见,一组三维坐标就唯一确定了一个子立方。下面介绍一下多位模型的基本概念:
立方体:由维度构建出来的多维空间,包含了所有要分析的基础数据,所有的聚合数据操作都在立方体上进行。
维度:就是观察数据的一种角度。在这个例子中,路线,源,时间都是维度,
这三个维度构成了一个立方体空间。维度可以理解为立方体的一个轴。要注意的是有一个特殊的维度,即度量值维度。
维度成员:构成维度的基本单位。对于时间维,它的成员分别是:第一季度、第二季度、第三季度、第四季度。
mongodb原理和架构
mongodb原理和架构
MongoDB是一个开源的文档数据库,使用JSON格式存储数据。它采用了分布式架构,支持水平扩展,具有高可用性和高性能。
一、MongoDB的架构
1.1 单节点架构
MongoDB最基本的架构是单节点架构,即一个MongoDB实例只有一个进程在运行。这种架构的好处是简单易用,适用于小规模的应用场景。但是,单节点架构的缺点也很明显,它无法处理大量的数据和高并发的请求。
1.2 副本集架构
为了解决单节点架构的问题,MongoDB引入了副本集架构。副本集由多个MongoDB实例组成,其中一个是主节点,其他节点是从节点。主节点负责处理所有的写操作和大部分的读操作,从节点负责复制主节点的数据并处理一部分读操作。当主节点宕机或者网络故障时,从节点会自动选举出一个新的主节点。
副本集架构的优点是能够提供高可用性和数据冗余,同时也可以通过读写分离来提高性能。但是,副本集架构也存在一些问题,比如需要协调节点之间的数据同步和选举过程,以及从节点可能会因为网络延迟导致数据滞后。
1.3 分片架构
当数据量达到一定规模时,副本集架构也无法满足需求。此时,MongoDB提供了分片架构。分片架构由多个MongoDB实例组成,其中
每个实例称为一个分片。每个分片只负责一部分数据的存储和处理。分片架构可以通过水平扩展来提高性能和容量。
分片架构的核心是分片键,它是用来将数据分配到不同分片的依据。MongoDB支持两种分片键,一种是区间分片键,另一种是哈希分片键。区间分片键将数据根据一定的范围划分到不同的分片中,而哈希分片键则是将数据根据哈希值分配到不同的分片中。
mondrian与jpivot介绍、olap用例
OLAP 系统结构
整个OLAP 系统为三层结构,最低层为存储层,一般分为两个部分1联机事务处理数据库.它是分析数据的来源;2 储存分析所用数据的数据仓库.该数据是从OLTP 数据库中提取和整理获得,通过这一层将OLAP 数据和OLTP 数据分离,这样就不会对原系统运行效率造成影响;第二层为应用层,它由OLAP 服务器与Web 服务器组成, OLAP 服务器是支持和管理多维数据结构的数据处理引擎,由它执行MDX 语句,从关系型数据库中读取数据,实现从关系型数据库到多维逻辑模型的映射,使数据以多维格式展示。Web 服务器是专门用于向OLTP 服务器提交用户请求或向用户浏览器发送处理结果以供浏览。顶层为前端浏览工具.采用Web 浏览页就可以实现对多维数据集的访问.并以表格或者图形的方式展现查询结果。架构如图所示:
存储层
应用层
表现层
前台设计:
1、表现层
本层采用jpivot 作为表示层,Jpivot 是JSP 定制标志库,它呈现一个联机分析处理表格并让用户能够执行典型的联机分析处理导航操作,如上卷、下钻和旋转等。它使用Mondrian 和XML/A 作为OLAP 引擎,使用WCF (Web Component Framework) 来支持使用XML 和XSLT 来创建UI 。 2、应用层
本层中Web 服务器采用Tomcat,由Mondrian 作为 OLAP 引擎,Mondrian 是一个OpenSource 的基于关系数据库的分析服务器,遵循MDX 语言、XML/A 和JOLAP 标准。它自定义了一种使用MDX 语言的客户端接口,可以通过执行MDX 语句,从关系型数据库中读取数据,实现从关系型数据库到多维逻辑模型的映射,使数据以多维格式展示。
领域驱动设计步骤
领域驱动设计步骤
领域驱动设计(Domain-Driven Design,简称DDD)是一种软件开发方法论,它将软件系统的设计与业务领域的概念模型紧密结合,旨在解决复杂业务问题,提高软件系统的可维护性和可扩展性。领域驱动设计包含一系列步骤,下面将详细介绍这些步骤。
1. 研究业务领域
领域驱动设计的第一步是深入研究业务领域,理解业务规则和业务流程。这需要与业务专家密切合作,收集业务需求,了解业务的核心概念和关键流程。在这个阶段,可以使用面向对象的建模工具,如UML,来绘制业务领域的概念模型。
2. 划分领域
在研究业务领域的基础上,需要将业务领域划分为不同的子域。每个子域代表一个独立的业务领域,有自己的业务规则和概念模型。划分领域的关键是识别出子域之间的边界和关联关系。可以使用战略设计工具,如领域地图,来帮助划分领域。
3. 设计限界上下文
每个子域都有自己的限界上下文,限界上下文定义了子域内的概念和业务规则。在设计限界上下文时,需要明确限界上下文的边界和与其他限界上下文的交互。可以使用限界上下文图来表示限界上下文之间的关系和交互。
4. 定义聚合根
聚合根是领域模型的核心,它是一组相关的实体和值对象的集合,具有自己的生命周期和一致性边界。在定义聚合根时,需要考虑它的行为和状态,并确保聚合根内的实体和值对象之间的一致性。可以使用聚合根图来表示聚合根内的关系和结构。
5. 设计领域服务
领域服务是执行领域操作的对象,它封装了领域规则和业务逻辑。在设计领域服务时,需要考虑它的接口和方法,以及与其他领域对象的交互。可以使用服务接口图来表示领域服务的接口和方法。
mondrian操作手册和优化配置
Mondrian操作介绍和调优配置
操作前提介绍
1、生成维度和指标
MDX查询语句在页面里面制定对应的查询前需要配置对应的查询数据源,使用的是jpivot 标签。有关jpivot的使用可以查看开源的项目jpivot。如下面指定对应的oracle数据库连接数据源。让mondrian可以连接到对应的数据库进行查询操作。查询操作使用的sql是MDX。类似于sql的语法,有关MDX的使用可以了解MDX语句。
jdbcDriver="oracle.jdbc.driver.OracleDriver"
jdbcUrl="jdbc:oracle:thin:@10.45.49.21:1521:osstest"
jdbcUser="bi71"jdbcPassword="smart"
catalogUri="/WEB-INF/queries/Analysis.xml">
select {[Measures].[Charge], [Measures].[CallTimes], [Measures].[Num of Subscriber], [Measures].[Duration], [Measures].[ARPU],
[Measures].[MOU]} ON COLUMNS,
{(
[AcctType].[AllAcctType],
[Package].[AllPackage],
[ProductState].[AllProdState],
[PayLevel].[AllPayLevel],
[ON-NetWorkDuration].[AllDuration],
现代主义建筑
水平起伏的线条,整座建筑好像一个融化时的冰淇淋,米拉公寓由 于风格极端,引起了巴塞罗那市民的指责,报纸以各种诨名来攻击 这个设计:比如蠕虫、大黄蜂的巢等。
• 圣家族大教堂1884年至今
尖塔虽然保留着哥特式的韵味,但结构己简练得多,教堂内外布满钟乳石 式的雕塑和装饰件,上面贴以彩色玻璃和石块,教堂浑身上下看不到一条 直线,一点清楚的规则,弥漫着向世界的工业化风格挑战的气息。
1933年有关城市规划的《雅典宪章》以居住单位为起点规定了城市的居住、工 作、游息和交通四大功能。
1956年第十次会议 “十次小组”(Team Ⅹ)之称。
1959年CIAM 宣告解散。
1927年魏森霍夫国际现代建筑展 (Weissenhofsiedlung ,Stuttgart,1927)
现代主义最重要的实践展示,是现代建筑发展的重要里程碑。 奠定了战后控制世界建筑基本方向的“国际式风格”。
1881年的芝加哥大火给了芝加哥重新选择建筑方式的机会, 使它成为高层建筑的故乡。从此摩天大楼横行于世。 · Frank Lloyd Wright 草原住宅 · Richardson 商业古典主义(与现代主义思潮相反)
马歇尔百货大厦
Carson,Pirie, Scott Building Chicago Louis Sullivan
现代主义建筑运动中的代表人物
(Masters in the Movement of Modern Architecture)
架构设计流程
架构设计流程
在进行架构设计之前,我们首先需要明确架构设计的目标和原则。架构设计是一个系统工程,需要考虑到系统的稳定性、可靠性、扩展性和安全性等方面。因此,我们在进行架构设计时,需要遵循
以下几个基本步骤。
第一步,需求分析。在进行架构设计之前,我们需要对系统的
需求进行全面的分析和调研。这包括对系统功能、性能、安全性和
可扩展性等方面的需求进行详细的了解和分析。只有充分了解系统
的需求,才能够有针对性地进行架构设计。
第二步,架构设计。在进行架构设计时,我们需要根据需求分
析的结果,选择合适的架构模式和技术方案。这包括对系统的模块化、分层、组件化等方面进行设计,以及对系统的性能、安全性、
可扩展性等方面进行考虑和优化。在进行架构设计时,我们需要充
分考虑到系统的整体结构和各个模块之间的关系,以及系统的扩展
和维护等方面的需求。
第三步,评审和优化。在完成架构设计之后,我们需要进行设
计评审,对设计方案进行全面的审查和评估。这包括对系统的性能、
安全性、可扩展性等方面进行全面的测试和评估,发现并解决设计
中存在的问题和不足。在评审的过程中,我们需要充分考虑到系统
的实际运行环境和用户的需求,对设计方案进行全面的优化和调整。
第四步,实施和测试。在完成架构设计之后,我们需要对设计
方案进行详细的实施和测试。这包括对系统的各个模块进行详细的
开发和集成,以及对系统的性能、安全性、可扩展性等方面进行全
面的测试和验证。在实施和测试的过程中,我们需要充分考虑到系
统的稳定性和可靠性,确保系统能够稳定运行并满足用户的需求。
总结来说,架构设计是一个系统工程,需要充分考虑到系统的
Mondrian介绍_New
配置Mondrian
为了使Mondrian作为一个XMLA 提供者,需要配置 datasource.xml 文件
配置数据源文件:datasources.xml
配置Cube文件:FoodMart.xml
配置数据源文件
路径:mondrian\WEB-INF\datasources.xml
关键是对DataSourceInfo节点的配置
配置Mondrian
下载Mondrian
部署Mondrian
配置Mondrian
下载Mondrian
下载地址: http://sourceforge.net/projects/mondrian
下载版本: mondrian-3.0.4.11371.zip
部署Mondrian
服务器环境
新建foodmart数据库
维表 Customer的 主键
维表Customer在 关系数据库中的 名称
级别的 名称
级别country在维表 Customer中的列名 称
添加产品维
添加产品维(因为产品维由两个表连接而成,因此比客户维复杂些)
因为Product维有两个表,所 以您必须在这里指定该维的 主表
<!-- 产品维 --> <Dimension name="Product"> <Hierarchy hasAll="true“ primaryKey=“procudt_id" primaryKeyTable="product"> <join leftKey=“procuct_class_id" rightKey=" procuct_class_id "> <Table name="product" /> <Table name="product_class"></Table> </join> <Level name="Product Family" column="product_family" uniqueMembers="true" table="product_class" /> <Level name="Product Name" column="product_name" uniqueMembers="true" table="product" /> </Hierarchy> </Dimension>
企业数字化转型中的系统架构设计与实现
企业数字化转型中的系统架构设计与实现
随着信息技术的不断发展,企业数字化转型已成为当前最为热
门的话题之一。为了更好地适应市场竞争和消费者需求,许多企
业都开始了数字化转型的尝试。而在这个过程中,系统架构设计
与实现无疑是非常重要的一环。
一、系统架构设计
企业数字化转型需要依赖一定的系统支撑,因此系统架构设计
就显得至关重要。系统架构是指系统中各个组件的结构、属性、
关系和行为等所构成的整体框架。在企业数字化转型中,一个好
的系统架构设计可以避免因需求变化等原因带来的重大改动,从
而在一定程度上提高系统的可维护性和稳定性。
要进行好的系统架构设计,需要从以下几个方面出发:
1. 系统目标:首先需要明确系统的目标以及功能需求,这是制
定系统架构的基础。
2. 技术选型:选择合适的技术框架和工具,以满足系统的需求,同时考虑到技术的成本和可维护性。
3. 扩展性设计:考虑到未来的需求变更和业务扩展,系统应该
具有良好的扩展性设计。
4. 可靠性和安全性设计:在设计系统架构时应该考虑到系统的可靠性和安全性,以避免出现重大故障和数据泄露等风险。
二、系统架构实现
系统架构设计好了,接下来就需要进行系统架构的具体实现。具体实现过程中需要明确以下几个方面:
1. 数据库设计:系统架构实现的第一步是进行数据库设计,这是整个系统的基础。
2. 模块划分:对系统的各个模块进行划分,明确各个模块间的调用关系和调用方式。
3. 代码实现:在具体的开发过程中,需要根据架构设计和模块划分进行代码的实现。
4. 测试验证:在代码实现后,还需要进行系统的测试验证,确保系统可以正常运行并满足需求。
mondrian
2 开源OLAP引擎-Mondrian
OLAP引擎实现了除多维数据展示外的所有数据分析功能:包括建立多维模型、解析MDX语句、返回分析结果。国外传统数据库厂商都推出了自己的OLAP分析工具,微软发行了MDX语言标准,SQL SERVER Analysis Service是其商业化OLAP引擎。
开源社区OLAP产品主要是Mondrian OLAP引擎。Mondrian是开源项目Pentaho 的一部分,是一个用Java写成的OLAP引擎。它实现了MDX语言、XML解析、JOLAP 规范。它从SQL和其它数据源读取数据并把数据聚集在内存缓存中,然后经过Java API 用多维的方式对结果进行展示,同时可以不写SQL就能分析存储于SQL 数据库的庞大数据集,可以封装JDBC数据源并把数据以多维的方式展现出来。JPivot是Mondrian默认的表现层工具,它是一个JSP 自定制的标签库,可以绘制OLAP分析图表。用户可以执行典型的OLAP导航,如下钻、切片。JPivot使用Mondrian作为它的OLAP服务器但也支持XML/A数据源访问。它使用WCF (Web Component Framework)框架,基于XML/XSLT来渲染Web UI组件。
Mondrian支持的数据库或数据仓库主要有:LucidDb、Oracle、Access、Mysql、Sybase、Ingres、Postgres、Hypersonic、Teredata、
Mondrian主要特点是对立方体进行了缓存,众所周知,缓存庞大的立方体对性能有很大的影响,但是Mondrian利用java语言的特点对这一点进行了很好的控制。其次由于Mondrian基于java语言,所以它能运行在不同的平台之上,这也是其流行的主要原因之一,例如花旗银行就在其数据仓库项目中用Mondrian作为它的OLAP引擎。Mondrian 是开源项目,为开发人员和数据分析人员提供了深入研究OLAP技术的机会,同时这也为优化Mondrian总体性能提供了可能。
ADMEMS软件架构设计方法设计方案
ADMEMS软件架构设计方法设计方案方法体系
作为方法体系,ADMEMS方法通过3个阶段和1个贯穿环节,来覆盖“需求进,架构出”的架构设计完整工作容。其中“3个阶段”是指预备架构阶段(PA阶段)、概念架构阶段(CA阶段)、细化架构阶段(RA阶段),“1个贯穿环节”是指对非功能目标的考虑。
PA阶段的任务是全面理解需求,从而把握需求特点,进而确定架构设计驱动力。其中,ADMEMS矩阵居于方法的核心;CA阶段必须考虑包括功能、质量、约束在的所有方面的需求,ADMEMS方法有自己的概念架构设计步骤和做法;RA阶段的总体方法为5视图方法,涉及逻辑架构、物理架构、开发架构、运行架构和数据架构。
文档模板(下载全套模板)
ADMEMS方法为软件架构设计提供了整套文档模板,涉及文档简介、架构描述方式、架构设计目标、
架构设计原则、逻辑架构视图、开发架构视图、运行架构视图、物理架构视图、数据架构视图、关键质量属性的设计。在架构设计实践中,架构师可以直接使用这套文档模板来设计架构,以及对架构进行描述。
前辈推荐
晋兴(中航集团公司631研究所研究员,前系统软件室主任):ADMEMS是当前软件架构设计领域先进的方法体系,在论述架构设计不同阶段的分析方法与设计技术的同时,给出了相应的实践策略、实践套路及有用的设计案例。本方法具有极强的实用性,不但是一线架构师及希望成为软件架构师者的福音,对我国软件业界在软件架构相关方面的研究工作也有一定的推动作用。
周伯生(北航计算机学院教授、博士生导师,美国SDPS学会院士):ADMEMS架构设计方法学既是提出者亲身的实践总结,又概括了业界的有效实践;不仅生动地反映提出者的创造性思维和对学术的刻苦耕耘,又反映出提出者对架构学的崇高历史责任感;不仅对架构师们有很好的参考价值,而且对推动架构学界的深入研究具有重要意义。
架构设计的方法
架构设计的方法
架构设计方法
随着信息技术的迅速发展,各种软件系统的规模越来越大,复杂度越来越高,需要有一种有效的方法来帮助设计出高质量的软件系统。架构设计作为软件系统设计的重要环节,其质量和效果对整个软件系统的生命周期都会产生深远的影响。本文将介绍架构设计的方法。
一、架构设计的概念
架构设计是指在软件系统设计过程中,为了满足系统的需求和质量要求,将系统划分为若干个互相协作的模块,并定义它们之间的接口、约束和关系的过程。架构设计需要满足系统的可维护性、可扩展性、可重用性、可测试性和性能等要求。
1.需求分析
在架构设计之前,需要对系统的需求进行深入的分析和理解,包括功能需求、非功能需求和约束条件等。这些需求将对系统的架构设计产生直接的影响,因此需要充分地考虑。
2.模块化设计
将系统划分为若干个模块是架构设计的核心,模块化设计需要考虑模块的职责、接口和依赖关系等。在模块化设计时,可以采用面向
对象的思想,将系统看作一个对象,将其划分为若干个类或模块,并定义它们之间的关系。
3.接口设计
模块之间的接口设计是架构设计中的重要环节,接口需要满足可读性、可理解性、可扩展性和可重用性等要求。在接口设计时,需要考虑接口的命名、参数传递、返回值类型和异常处理等方面。
4.设计模式的应用
设计模式是一种经过实践验证的软件设计经验,可以提高软件系统的质量和可维护性。在架构设计中,可以应用诸如单例模式、工厂模式、观察者模式等常用的设计模式,以提高系统的可扩展性和可重用性。
5.性能优化
性能优化是架构设计中的一个重要方面,需要考虑系统的吞吐量、延迟、并发性和容错性等方面。为了优化系统的性能,可以采用负载均衡、缓存、异步处理、数据库优化等技术手段。
ceph分布式存储系统Monitor源码分析总结
Monitor总结
1.概述
Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。相比传统分布式存储,其优势有:
(1)高性能
➢摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高;
➢考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等;
➢能够支持上千个存储节点的规模,支持TB到PB级的数据。
(2)高可用
➢副本数可以灵活控制,支持故障域分隔,数据强一致性;
➢多种故障场景自动进行修复自愈,没有单点故障,自动管理;
(3)特新丰富
➢支持三种存储接口:块存储、文件存储、对象存储;
➢支持自定义接口,支持多种语言驱动。
Ceph的核心组件包括:
(1)Monitor:一个Ceph集群需要多个Monitor组成的小集群,它们通过Paxos 同步数据,用来保存OSD的元数据。
(2)OSD:全称Object Storage Device,也就是负责响应客户端请求返回具体数据的进程。
(3)MDS:全称Ceph Metadata Server,是CephFS服务依赖的元数据服务。
(4)Object:Ceph最底层的存储单元是Object对象,每个Object包含元数据和原始数据。
(5)PG:全称Placement Grouops,是一个逻辑的概念,一个PG包含多个OSD。
引入PG这一层其实是为了更好的分配数据和定位数据。
Ceph存储集群中主要的服务有Monitor,OSD,MDS。其通信框架如下图所示:
OSD
Monitor
MDS
Dispatcher Messager
Domain Model设计模式
刚才在javaeye看到了robbin等人关于Domain Model的讨论。这里想总结一下做为笔记。呵呵
[@more@]
robbin总结的常用主流三种方式:
一个实体类叫做Item,指的是一个拍卖项目
一个DAO接口类叫做ItemDao
一个DAO接口实现类叫做ItemDaoHibernateImpl
一个业务逻辑类叫做ItemManager(或者叫做ItemService)
ItemDao定义持久化操作的接口,用于隔离持久化代码。
ItemDaoHibernateImpl完成具体的持久化工作,请注意,数据库资源的获取和释放是在ItemDaoHibernateImpl里面处理的,每个DAO方法调用之前打开Session,DAO方法调用之后,关闭Session。(Session放在ThreadLocal中,保证一次调用只打开关闭一次)
事务的管理是在ItemManger这一层完成的,ItemManager实现具体的业务逻辑。除了常见的和CRUD有关的简单逻辑之外,这里还有一个placeBid的逻辑,即项目的竞标。
以上是一个完整的第一种模型的示例代码。在这个示例中,placeBid,loadItemById,findAll等等业务逻辑统统放在ItemManager中实现,而Item只有getter/setter方法。
第二种模型,也就是Martin Fowler指的rich domain object是下面这样子的:
一个带有业务逻辑的实体类,即domain object是Item
一个DAO接口ItemDao
架构设计六大原则
架构设计六大原则
架构设计是软件开发中至关重要的一环,它决定了软件系统的可靠性、可扩展性、可维护性等方面。在架构设计中,有六大原则需要遵循,它们分别是:单一职责原则、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则和迪米特法则。
单一职责原则(SRP):一个类或模块应该只有一个职责,即只负责一项功能。这样可以使得类或模块的设计更加简单、清晰,易于维护和扩展。如果一个类或模块承担了多个职责,那么它的设计就会变得复杂,难以维护和扩展。
开闭原则(OCP):软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。这意味着当需要添加新的功能时,应该通过扩展现有的实体来实现,而不是修改现有的实体。这样可以避免对现有代码的破坏,提高代码的可维护性和可扩展性。
里氏替换原则(LSP):子类应该能够替换掉父类并且不会影响程序的正确性。这意味着子类应该继承父类的所有属性和方法,并且不能修改父类的行为。这样可以保证程序的正确性和稳定性。
依赖倒置原则(DIP):高层模块不应该依赖于低层模块,它们应该依赖于抽象。这意味着模块之间的依赖关系应该通过抽象接口来实现,而不是直接依赖于具体实现。这样可以降低模块之间的耦合度,提高代码的可维护性和可扩展性。
接口隔离原则(ISP):客户端不应该依赖于它不需要的接口。这意味着接口应该尽可能小,只包含客户端需要的方法。这样可以避免客户端依赖于不必要的接口,提高代码的可维护性和可扩展性。
迪米特法则(LoD):一个对象应该对其他对象有尽可能少的了解。这意味着一个对象应该只与它的直接朋友进行交互,而不是与朋友的朋友进行交互。这样可以降低对象之间的耦合度,提高代码的可维护性和可扩展性。
DDD(DomainDrivenDesign)架构设计
DDD(DomainDrivenDesign)架构设计
⼀、为什么要分层
分层架构是所有架构的⿐祖,分层的作⽤就是隔离,不过,我们有时候有个误解,就是把层和程序集对应起来,就⽐如简单三层架构中,在你的解决⽅案中,⼀般会有三个程序集项⽬:XXUI.dll、XXBLL.dll 和 XXDAL.dll,然后把这三个程序集看成⼀个层,这没什么不可以,但当项⽬复杂的时候,如果还按照这种⽅式的话,你的程序集中的⽂件夹会越来越多,程序集也会越来越⼤。当你的视野跳出这个程序集的概念后,你会发现,层不只是和程序集对应,也和解决⽅案⽂件夹,或者是整个解决⽅案对应,⼀个层甚⾄可以对应⼀个系统。
分层的⽬的即为了“⾼内聚低耦合”的思想。
⼆、微软经典的三层架构
任何⼀个.net都知道的微软的三层架构,三层架构就是把业务划分为界⾯层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。如下图
各层的作⽤:
界⾯层(UI):主要表⽰WEB⽅式,也可以表⽰成WINFORM⽅式;如果逻辑层相当强⼤和完善,⽆论表现层如何定义和更改,逻辑层都能完善地提供服务。主要对⽤户的请求接受,以及数据的返回。
业务逻辑层(BLL):主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积⽊,那逻辑层就是对这些积⽊的搭建。
数据访问层(DAL):主要看数据层⾥⾯有没有包含逻辑处理,实际上它的各个函数主要完成各个对数据⽂件的操作。⽽不必管其他操作。