思想上移 行为下移---抽象工厂+反射+配置文件

来源:互联网 发布:淘宝上哪家店铺包包好 编辑:程序博客网 时间:2024/06/06 11:40

   

   机房收费系统个人版开始了有段时间了,但是前进的速度似乎都没有蜗牛快!  归根结底  差在哪? 

   几天的实践下来,我想我找到答案了---缺少动手实践 

   一件事情,你就是把他想的在完美,在天衣无缝,在华丽,没有去真真正正的实践也是不行的,会成为一个空想。同理呢,遇到一个问题,你把他想的比登山还难,结果就是他真的成了一座山,把你挡住了,相反,当你也能像愚公一样拿着铁锹去挖那座山时,慢慢的山也就没了。那么你也就会如诗中所说:

                    山重水复疑无路,  柳暗花明又一村。

    米老师的思想上移,而行为下移,这句话听了很多遍了,但要说真的理解了,还真是惭愧,对于现在的任务个人版的机房收费系统,真真儿的把我给挡住了。 由此想起了前几天我还这样形容自己呢,我的学习道路上突然出现了一座大山,我该怎么办啊,好高啊!  现在想想我比愚公还笨了。我总是把问题想的多么多么复杂啊,但是却不去动手实践,渐渐的我开始恐惧了!看着同伴们都走过了我现在所处的阶段,我除了着急也该做点什么了。

   端午假期,我要去做!自己做出来了才是真的懂了,思想要上移,而行为要下移! 我就是问多少人,都不如自己去做!就像我每次问学敏,她都是要我自己去做,嘿嘿,还好没有直接告诉我,要不然我岂不是学不到这么多了!     从画图着手 此次在包图中加了抽象工厂+反射 来防止系统更换数据库时,维护的困难,实现高内聚低耦合  

   


    有了图也就类似于有了思想吧,那么接下来我要去实践,打算敲一个小的登陆例子来看看这个过程是怎么实现的,于是我要再次学习抽象工厂模式,反射的格式 ,以及配置文件等问题,从新回头学习看书,发现,书上写的在好,你理解的在怎么好,用了才知道也不是那么容易的  

    搭建程序:

     也类似于三层的搭建,根据包图的一些关系,来添加引用 具体的添加步骤参照

      博客 :三层架构入门知识梳理  点击打开链接

    配置文件: 

<?xml version="1.0"encoding="utf-8" ?><configuration>           <appSettings>                <addkey ="DB" value="DAL"/>        </appSettings></configuration>


  其中KEY 就是我们自己定义的一个字段的名字,而Value的值则对应着我们所使用的数据库,他也可以换成其他数据库 ,达到易维护的目的 

   抽象工厂+反射:

     以往我们在实例化某些东西,需要写在程序里,而抽象工厂+反射是用字符串来实例化对象,切变量可以更换,进而接触一些分支带来的耦合,在我的登陆例子中,工厂中代码如下:

    

Public Class dataAccess    Dim strDB As String =System.Configuration.ConfigurationManager.AppSettings("DB")    'Dim AssemblyName As String ="DAL"    Public Function CreateUser() AsIUser        'Dim className As String ="DAL" + "." + strDB + "User"        Dim className = strDB +".user_Info"        ReturnCType(Assembly.Load("DAL").CreateInstance(className), IUser)    End FunctionEnd Class


 工厂读取配置文件,进而知道我所用的数据库是什么,我将D层命名为了DAL ,那么DB的值也就为DAL。 整个登陆过程如下:

   U层

  

Private Sub btnLogin_Click(sender As Object, e AsEventArgs) Handles btnLogin.Click        Dim user1 As Entity.T_user = NewEntity.T_user        user1.UID = txtUserName.Text.ToString()  将参数值传给实体层        user1.Upassword =txtUserPwd.Text.ToString()        Dim b1 As BLL.userLogin = NewBLL.userLogin() 实例化B层        If b1.userLoginSystem(user1)Then           MsgBox("登陆成功")            Me.Hide()        Else           MsgBox("登陆失败,请重新登陆")            Me.Show()        End If    End Sub


   B层  负责逻辑判断B层需要U层传来的信息通过接数据库接口来实现。那么B层首先要告诉工厂 我需要什么接口,工厂就会通过相应的命令来创建接口。返回给B层 

 

 

Public ClassuserLogin    Public Function userLoginSystem(ByValuser2 As Entity.T_user) As Boolean        Dim IUser1 As IDAL.IUser          Dim factory AsDataAccessFactory.dataAccess = New DataAccessFactory.dataAccess实例化工厂        IUser1 = factory.CreateUser()调用工厂中创建接口的方法        'IUser1 = NewDAL.user_Info        If IUser1.userLoginSystem(user2)Then   调用接口方法 通过DAL 层来实现接口            Return True        Else            Return False        End If    End FunctionEnd Class

   B层 得到了工厂创建的接口后 要访问接口  

   IDAL 

Public Interface IUser    Function userLoginSystem(ByVal userLAs Entity.T_user) As BooleanEnd Interface


接口中的方法,也就是需要通过D层来实现的方法,在调用的过程中,D层就会将这个方法实现,返回相应的值 

 D层:  

Public Class user_Info : Implements IUserDim str As String = "datasource =192.168.24.74;initial catalog =studentSystem;user ID=sa;password=123456"    Dim conn AsSqlClient.SqlConnection    Public Sub New()        conn = NewSqlClient.SqlConnection        conn.ConnectionString =str        conn.Open()    End Sub    Public Function userLoginSystem(ByValuserL As T_user) As Boolean Implements IUser.userLoginSystem        Dim sqlStr As String        '查询命令字符串        sqlStr = "select * fromT_user where U_ID='" & userL.UID & "' and U_password='"& userL.Upassword & "'"        Dim strCmd AsSqlClient.SqlCommand        strCmd = NewSqlClient.SqlCommand(sqlStr, conn)        'strCmd.CommandText =sqlStr        'strCmd.Connection =conn        '执行命令并查询数据,将数据返回到datareader中        Dim dr As SqlClient.SqlDataReader= strCmd.ExecuteReader        If dr.Read() Then            Return True        Else            Return False        End IfEnd FunctionEnd Class


  D层完成了接口的实现,接着这些信息也会返回给U层来判断登陆是否成功了。 

  这些看似很容易的步骤,在运行的时候却出现了很多问题 

 

 "未能加载文件或程序集“DAL”或它的某一个依赖项。系统找不到指定的文件”的解决方案 .

       查了一些资料和社河的关于这个问题的解释,才算是把这个问题通过了

 问题解决文章:  DALFactory出现"未能加载文件或程序集“DAL”或它的某一个依赖项。系统找不到指定的文件”的解决方案 .

     我在跟踪调试时,发现在工厂那,创建接口的过程中,找不到DAL的文件,所以停止了,而那些dll 文件在我的U层内还真的没有,复制过去了,程序好了,这个问题的其他小问题也学习了点。哎 只要你肯下工夫,也就没啥问题了吧。  

     工厂困扰了我一天半,今天不仅感慨 工厂一罢工,其他怎么办那! 

 

另外 在创建接口的过程中,反射的模式 要是用错了也会出问题 

反射模式如下:Assembly.Load(“程序集名称”).CreateInstance("命名空间名称.要实例化的类名") 

   此处程序集的名称也就是我们需要的数据库程序集名称 ,而要实例化的类名也是 数据库层中相应的类 

 

  截至到现在为止,整个过程才算是真的给运行出来,而且明白了!   

  思想上移,行为下移!   继续向下一个问题出发!  

   

   

 


 

原创粉丝点击