分层开发

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36074150/article/details/63254136

   分层开发的优点:

          1.代码复用

          2.分离开发人员的关注 (每一层的开发人员需要知道下一层的接口)

          3.降低了系统间的依赖 (分层开发模式下各层间的耦合性降低)

          4.分层开发有利于程序的无损替换

   程序集:

                   程序集 .dll exe是程序集的两种体现

          1.可执行文件,即.exe文件

          2.类库文件,即.dll文件。  例如:使用Visual Studio 创建的类库程序,编译后会生成.dll文件

   程序集,解决方案,项目和命名空间的关系如下:

          1.一个;解决方法可以由一个或多个项目组成,这些项目可以是Windows应用程序,类库等 (每个项目就是一个命名空间)

          2.一个程序集可以包含多个命名空间,程序集默认的命名空间名称就是程序集的名称

          3.命名空间是组织C#程序的一种逻辑架构,一个命名空间可以有多个类      

   异常处理机制两种情况:

          1.一种是由用户程序执行引发的异常,派生于ApplicationException类。

          2.另一种是由公共语言运行库引发的异常,派生于SystemException类。

   异常类的常用属性:  

          Message:提供引起异常的详细信息

          Source:表示导致异常发生的应用程序或对象的名称

          StackTrace:提供在堆栈上所调用方法的详细信息,并首先显示最近调用的方法

          InnerException:对内部异常的引用,如果此异常基于前一个异常,则内部异常指最初发生的异常

          throw:语句用来抛出异常,在分层架构中,常常采用下层将异常抛给上层的调用方法

   子类异常的分类
          sqlexception            数据访问异常
          ioexception             文件操作异常
           filenotfountexception   文件没有找到异常 
          applicationexecepion    应用程序异常
          ArgumentNullException 参数为空异常

           

   分层的结构
          DAL 数据访问层  :和数据库交互,处理数据
          UI  表示层      : 展示数据



   如何创建(开发)
          DAL层 类库项目
  
          UI层   普通WinForm窗体
  
  注意事项(常见错误)
          UI依赖DAL
   
   
          将UI层设置为启动项目
   
   
          不要再类库中创建窗体
   
   
          添加引用,分两步:1物理引用(右键添加)+++代码中using添加
   
   
          在搭建分层项目的初期,一定要规范命名,当你们的层次超过我之前,一定不要自己手动改。
   
          xxx.desinger.cs
          微软自动生成代码



   多路异常捕获
          多个Catch
          黄金法则:
          多个Catch出现的时候,子类异常位于前面


          throw ex;或者 throw;只能出现在catch,不能在try中。


          Exception ex没有new但是可以直接使用它的Message属性,不报空指针。

 

      语句:

          1.try-catch

            try{     

              //......

               } 

               catch(SqlException ex)

               {

                  throw ex;

                 }

                 catch(Exception ex)

               {

                throw ex;

                }


          2. try-finally

             try

            {

             //......  可能引发异常的工作代码

             }

            finally

             {

                   清除相关对象的代码

             }


          3.try-catch-finally

              try

             {

                 //可能引发异常的工作代码

             }

             catch(异常对象)

              {

                 //异常处理

                 }

                 finally

                {

                  //清理相关对象的代码

                 }



        

       

展开阅读全文

分层开发的一点想法

01-09

一直按照petshop的分层来写.rn但是写到后面,让别人用的时候自己很心虚.rn比如一个工作人员表的model层.rnpublic class lx_workerrn rn public lx_worker()rn rn private int _id;rn private string _w_name;rn...rnrnrn         public lx_worker(int id,string w_name)rn ..rnrn         public int idrn rn getreturn _id;rn ...rn}rnrn[color=#FF0000]那么 lx_worker myworker=new lx_worker();rn代表什么?一个没有意义的对象[/color]在程序中充斥着这种代码.rn如果不小心,比如没有 myworker.w_name=...给工作人员添加名字.这样的操作.就进行插入操作.那肯定是出问题的。字段很多要一个一个检查.rn所以感觉应该privite lx_worker()rn rn默认的构造函数应该去掉.rn而去使用自定义函数rnpublic lx_worker(int id,string w_name)rn ..rn让 实体类都是有意义的类.rnrn所以这也就让我们 dal 层添加数据的方法,不能再是 rnvoid add(lx_worker myworker)rn因为添加的时候.都没有一个有意义的实体.都是默认构造函数的实体.rn我感觉应该 myworker add(string name)结果是返回一个有意义的实体.rnrnrn还有比如有些字段是不能更改比如用户登陆名字.这个就必须是只读的。如果存在一个默认的构造函数.那么new 了之后.那些只读字段怎么办?只读只能是初始化副直的.rnrnrn分层写代码,按照一个表,一个实体对象的写法.总会有些操作感觉哪里有问题。rn比如工作人员表格.又添加了一个工作人员更详细的表格,比如worker_detailrn那么我们删除工作人员的时候,并没有把工作人员的详细信息删除.rn(当然,数据库有级连删除会一起删除,但那属于数据库设计.不代表程序设计)rnrn所以一个表对应一个实体又是不合理的。rn以 woker组合detail 新加一个类.rngoodworkerrnrnprivite worker;rnprivite detailrnrnrn而对应的方法 删除 .就是rndel(int id)rnrn(事务处理)rndal.detail.del(id);rndal.worker.del(id);rnrnrn这又有一个问题.如果和工作人员的信息又有新的添加.比如工资信息.rn那么我们又必须频繁修改goodworker的model和dal层.rnrnrnrn感觉应该有些还是组合和接口会比较好点.rn//modelrnpublic class workermodelrnrn属性rnrnworkermodel(...)自定义构造函数rnrnrnrnrnrnrninterface iworkeractionrnrndelrnrnrnrn//dalrnclass worker:iworkeractionrnrn//构造函数用model的构造函数rnworkermodel myworker;rnrnworker(.....)rnrnworkermodel(...)自定义构造函数rnrnoverwriter del()rnrnrnrn//bllrnabstruct abworker:workerrnrn继承基类,rn组合内部对象的方法 形成给外部的方法rnrnrn程序中:abworker myworker=new worker(.....)rnmyworker.del(..)rnrn不知道这样用会不会以后修改起来会比较好点。rn自己感觉在平常的小程序中。这样还是会稍嫌麻烦.rnrn 论坛

没有更多推荐了,返回首页