浅谈自己去设计的一套简单的系统架构
这篇文章谈一谈如果我是个软件架构师(自己还远远不够一个架构师),自己如何去设计一套系统。当然自己才疏学浅,考略不周,但是写的都是自己思考过的和掌握的知识。
我没做过多数据库和多种语言开发的系统,所以这里的数据库只限定于SqlServer和dotnet平台。
数据库访问部分:
这里的核心是存储过程。我设计的这套系统的架构数据访问部分以存储过程为核心。分为四个部分:
1、存储过程:数据库操作都是存储过程。
2、实体层:实体类的属性和数据库表的字段一一对应,有多少个表就有多少实体类。
3、数据访问层:数据访问层的代码是用来调用存储过程的。
4、数据业务逻辑层:数据业务逻辑层用来调用数据访问层。
这里只想谈谈数据的查询。这个简单的架构中,使用DataSet来取值,对于一条记录的查询(也就是根据主键来查询的操作),我将获取的DataSet中的DataTable的第一笔记录,并转换成一个实体,将这个实体将由数据访问层传递到数据业务逻辑层。对于连接查询或者多笔记录的查询,直接使用DataTable或者DataSet来传递(对于连接查询如果使用List我感觉十分不便,使用DataTable或则DataSet却非常方便)。数据查询都通过分页处理。
说明:这些数据库访问的代码可以由CodeSimith,或者自己写的代码生成器去生成。
数据通信部分(服务):
这个使用WCF技术,将前面述说的数据库访问层的代码放在WCF服务中。
根据客户端的需求情况定义WCF的服务契约。在WCF服务契约中调用数据访问部分中的数据业务逻辑层。
使用WCF的好处在于你可以不用考略客户端是使用什么技术开发的,方便的进行分布式开发。
WCF服务与客户端数据交换使用字符串。如果有数据业务逻辑层返回的是一个实体,则将此实体序列化为字符串;如果是DataTable,也序列化为字符串。
客户端部分(UI):
这里以ASP.NET MVC实现客户端为例。当然客户端可以多种多样,你也可以使用Windows Form、WPF、ASP.NET等。
我们知道ASP.NET MVC,可以分成 Model、View、Controller。
Model:使用Repository模式。会在Repository中定义一些方法去调用WCF。对于实体类,一部分可以直接沿用第一部分的数据访问中的实体类。我们还可以定义一些ViewModel。由于在WCF服务中获取的数据是字符串,这个需要一个步骤将它们转换为实体或者DataTable。对于是实体的字符串,直接反序列化就行了。对于DataTable,反序列化为DataTable之后,还将它转换成List。对于多表连接查询的情况,我们在MVC项目中会定义一个对应的ViewModel,将此类存储过程查询出的DataTable转换成ViewModel的List。
Controller:使用依赖注入的方式。通过Controller的构造函数注入Repository。
View:这部分重点是美工。
异常处理:
可以参考我翻译的这篇文章异常处理准则
日志处理:
略
缓存:
Memcached
总结:这个是我自己思考出的一个东西,并没有在实际中运用。欢迎大家批评指正。