我一直探讨怎样把代码写的更简洁,尤其大型的系统如果架构设计得好得话,可以省去多少代码和时间啊,同时也能跟便于后人维护。想必大家都看过或学过微软Pet Shop的例子,说真的我很佩服它里面所用到的技术,但却不敢苟同它的设计,想必看过的人都知道要想把它看懂是不是还真的花点时间,而对应这个例子,它的业务逻辑其实不很复杂。如果那个大型系统,一个数据插入就关系到好几个业务。如果都象那样设计,那样得花多少时间啊。想必没有那儿实际开发得完全参考。(如大家有什么不同观点,欢迎讨论)
所以我一直寻找一个好的设计思想。希望大家可以探讨一下。
下面是从我的一个实际项目的架构设计,分解的一个Demo(添加员工信息)。采用的三层结构:应用层,业务逻辑层,数据层,和分布式系统设计技术(Remoting),Com+事务。(设计很简单,明了很容易就能看懂,也很容易写代码)
数据层开始:
建立一个类DataBase作为数据层底层,用于连接数据库,这样保存一个客户端只有一个数据库连接,其他数据操作层从类派生。

}

数据层就这么简单,如果还有很多的业务逻辑可以单独再新建一个类也是从DataBase派生。
业务逻辑层:
业务逻辑层调用数据的进行业务,每个业务里面可能要调用很多个数据层的方法,这就看你个系统大小了。我的这个demo中增加员工信息这个业务时,只有两个步骤:一是插入员工信息,如果不成功,回滚事务,如果成功,接着进行该业务, 向系统日志中写如日志(这是一般系统对数据更新都要进行的一步:写入日志)。写入日志也完成,这个添加员工信息的这个业务就算完成了,然后提交事务,返回值。如果你的一个业务逻辑很多的话,那就可以调用多个数据层方法,同时使用事务,保证一个业务的所有步骤都正确完成。

}

而应用层只需要调用业务层的方法,然后就不用去管了,所有的业务逻辑都交给业务层去处理

从软件结构设计,讨论代码的简洁private void btnAdd_Click(object sender, EventArgs e)
  }

看完上面的介绍是不是觉得一个三层架构的设计其实很简单,想必这样的代码不用看多久就能够马上看懂。同时采用了分层,以后维护也更加方便。就算业务改变了,也只需改变业务层的代码。
如果你是一个大型系统,将之变为一个分布式的系统也简单,改业务层的类从MarshalByRefObject派生,在服务器端,注册业务层类为远程对象,在客户端直接调用远程对象。
这个可以在Vs 2005中使用配置文件完成,稍加点代码就可以完成一个分布系统的发布。
可以写个Window服务程序,用来注册远程对象
只要加入:RemotingConfiguration.Configure("RemoteServer.exe.config", false);

从软件结构设计,讨论代码的简洁<?xml version="1.0" encoding="utf-8" ?>
从软件结构设计,讨论代码的简洁
<configuration>
从软件结构设计,讨论代码的简洁  
<connectionStrings>
从软件结构设计,讨论代码的简洁    
<add name="ArchDesign.Properties.Settings.DataBaseConnectionString"
从软件结构设计,讨论代码的简洁        connectionString
="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DataBase.mdf;Integrated Security=True;User Instance=True"
从软件结构设计,讨论代码的简洁        providerName
="System.Data.SqlClient" />
从软件结构设计,讨论代码的简洁    
<add name="SqlConnectionString"
从软件结构设计,讨论代码的简洁          connectionString
="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DataBase.mdf;Integrated Security=True;User Instance=True"
从软件结构设计,讨论代码的简洁          providerName
="System.Data.SqlClient" />
从软件结构设计,讨论代码的简洁  
</connectionStrings>
从软件结构设计,讨论代码的简洁  
<system.runtime.remoting >
从软件结构设计,讨论代码的简洁    
<application name="RemoteHostService">
从软件结构设计,讨论代码的简洁      
<service>
从软件结构设计,讨论代码的简洁        
<wellknown  type="BLL.BllWorkerInfo,BllWorkerInfo" objectUri="BllWorkerInfo" mode="SingleCall" />
从软件结构设计,讨论代码的简洁      
</service>
从软件结构设计,讨论代码的简洁      
<channels>
从软件结构设计,讨论代码的简洁        
<!--<channel type="System.Runtime.Remoting.Channels.Tcp,System.Runtime.Remoting" port="9999"  />-->
从软件结构设计,讨论代码的简洁        
<channel ref="tcp" port="9999"/>
从软件结构设计,讨论代码的简洁        
<!--<channel ref="http" port="8888" />
从软件结构设计,讨论代码的简洁        <channel ref="ipc" portName="testPipe" />
-->
从软件结构设计,讨论代码的简洁      
</channels>
从软件结构设计,讨论代码的简洁    
</application>
从软件结构设计,讨论代码的简洁  
</system.runtime.remoting>
从软件结构设计,讨论代码的简洁
</configuration>


客户端可以直接用New调用远程对象,在程序开始是运行配置文件:RemotingConfiguration.Configure("RemoteServer.exe.config", false);

从软件结构设计,讨论代码的简洁<?xml version="1.0" encoding="utf-8" ?>
从软件结构设计,讨论代码的简洁
<configuration>
从软件结构设计,讨论代码的简洁    
<configSections>
从软件结构设计,讨论代码的简洁    
</configSections>
从软件结构设计,讨论代码的简洁    
<connectionStrings>
从软件结构设计,讨论代码的简洁        
<add name="ArchDesign.Properties.Settings.DataBaseConnectionString"
从软件结构设计,讨论代码的简洁            connectionString
="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DataBase.mdf;Integrated Security=True;User Instance=True"
从软件结构设计,讨论代码的简洁            providerName
="System.Data.SqlClient" />
从软件结构设计,讨论代码的简洁      
<add name="SqlConnectionString"
从软件结构设计,讨论代码的简洁            connectionString
="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\DataBase.mdf;Integrated Security=True;User Instance=True"
从软件结构设计,讨论代码的简洁            providerName
="System.Data.SqlClient" />
从软件结构设计,讨论代码的简洁    
</connectionStrings>
从软件结构设计,讨论代码的简洁  
<system.runtime.remoting >
从软件结构设计,讨论代码的简洁    
<application name="RemoteHostClient">
从软件结构设计,讨论代码的简洁      
<client>
从软件结构设计,讨论代码的简洁        
<wellknown type="BLL.BllWorkerInfo,BllWorkerInfo" url="tcp://localhost:9999/BllWorkerInfo" />  
从软件结构设计,讨论代码的简洁      
</client>
从软件结构设计,讨论代码的简洁      
<channels>
从软件结构设计,讨论代码的简洁      
</channels>
从软件结构设计,讨论代码的简洁      
</application>
从软件结构设计,讨论代码的简洁  
</system.runtime.remoting>
从软件结构设计,讨论代码的简洁
</configuration>

一个简单的三层结构的架构就达起来了,可能其中还有某些不足的地方,例如由于保存一个客户端只要一个数据连接,都从一个数据低层派生,如果是多个数据库那就有问题。还有就是如果一个业务参数过多,每个参数写起来也很麻烦,修改起来还得看下参数的顺序,可以把他改为类对象,每个数据表对应一个类,类似
pet Shop的设计,同时可以将业务层写个接口,只提供接口给客户端调用,这个可以同时开发。总之我觉得整个设计一个就是简单,像事务处理,业务逻辑这样一写都非常明了,以后维护起来也很方便。如果大家觉得有更好的简洁的设计欢迎大家指点宝贵的意见,相互学习。
/Files/zhang3533/ArchDesign.rar

相关文章:

  • 2021-11-18
  • 2021-06-26
  • 2021-10-20
  • 2021-07-14
  • 2021-06-21
  • 2022-12-23
  • 2022-01-01
猜你喜欢
  • 2022-12-23
  • 2021-11-14
  • 2022-12-23
  • 2021-10-29
  • 2021-10-31
  • 2021-06-29
  • 2021-05-18
相关资源
相似解决方案