当前位置: 首页 > 科技观察

三层架构实现登录(工厂+反射+配置文件)

时间:2023-03-12 01:07:47 科技观察

分层思维:三层开发就是把整个业务应用划分为表现层、业务逻辑层、数据访问层、数据库等层,将业务逻辑访问、数据访问和数据库访问分开,有利于系统的开发、维护、部署和扩展。其实一句话,就是做到“高内聚低耦合”。采用“分而治之”的思想,将问题进行划分,单独解决,易于控制,易于扩展,易于分配资源。以登录demo为例:工厂+反射+配置文件三层UML图:通过UML图,我们可以清楚的看到各层之间的依赖关系。NET设计方案:各层代码实现:UI层'--接口ImportsEntityImportsBLLPublicClassLoginPrivateSubButton1_Click(senderAsObject,eAsEventArgs)HandlesButton1.ClickDimEntityUserAsNewEntity.EntityUserDimBLLUserAsNewBLL.BLLUserEntityUser.User_IDUser=txtID.TextEntityBaseUser.User_Key=GetfBKey)Then(EntityBaseUser.User_Key=GetfBKey)ThenMsgBox("登录成功!")elseMsgBox("登录失败!")EndIfEndSubEndClassBLL层'--DimDalFAsNewFactory,调用工厂时,将接口类型作为参数传入,在工厂中通过接口类型去查找实体的实现对象ImportsEntityImports[Interface]ImportsFactoryClassPublicClassBLLUserPublicFunctionGetBase(ByValEntityUserAsEntity.EntityUser)AsBooleanDimDalFAsNewFactoryDimEntity_UserAsNewEntity.EntityUserEntity_User.User_ID=EntityUser.User_IDEntity_User=DalF.Interface_User.GetBase(Entity_User)IfEntity_User.User_Key=EntityUser.User_KeyThenReturnTrueElseReturnFalseEndIfEndFunctionEndClassFactory类'--反射+配置文件实现数据库访问,改变数据库只需要改变配置文件'--AppSetting读取配置文件中的类别字符串Imports[Interface]ImportsSystem.ReflectionPublicClass工厂PrivateSharedReadOnlyAssemblyNameAsString="DAL"DimDataBaseAsString=System.Configuration.ConfigurationSettings.AppSettings("sql")FunctionInterface_User()As[Interface].InterfaceUserDimClassNameAsString=AssemblyName+"."+DataBase+"DALUser"(ClassName),[Interface].InterfaceUser)EndFunctionEndClassInterface接口层'--定义接口,使DAL层通过引用继承,实现接口ImportsEntityPublicInterfaceInterfaceUserFunctionGetBase(Entity_UserAsEntity.实体用户)作为实体。EntityUserEndInterfaceDAL层'--操作数据库ImportsEntityImports[Interface]ImportsSystem.Data.SqlClientPublicClassDALUser:Implements[Interface].InterfaceUserDimConnStrAsString=System.Configuration.ConfigurationSettings。AppSettings("ConnStr")DimsqlconnAsSqlConnection=NewSqlConnection(ConnStr)'---连接收据库FunctionGetBase(Entity_UserAsEntity.EntityUser)AsEntity.EntityUserImplements[Interface].InterfaceUser.GetBaseDimsqldataAsString="select*fromUser_InfowhereUser_ID='"&Entity_User.User_ID&"'"'---SQL语句,从User_Info读取所有信息DimsqlcmdAsNewSqlCommand(sqldata,sqlconn)'---连接数据库,打开User_Info表DimsqlreadAsSqlDataReader'---SqlDataReader读取数据库方法,只读Trysqlconn.Open()sqlread=sqlcmd.ExecuteReader'---ExecuteReader方法,查询数据库,得到结果ExecuteReader返回SqlDataReadersqlread。Read()'---sqlcmd.ExecuteReader的Read()读取表中的记录,每次调用返回一行的结果集。Entity_User.User_ID=sqlread.Item("User_ID")Entity_User.User_Key=sqlread.Item("User_Key")ReturnEntity_UserCatchexAsExceptionEntity_User.User_Key=""ReturnEntity_UserEndTryEndFunctionEndClass实体实体层'---实体类负责用于实体的表示和数据的传输,没有任何逻辑内容。PublicClassEntityUserPrivatestrUser_IDasStringPrivatestrUser_KeyAsStringPublicPropertyUser_IDasStringGet'---获取值Return(strUser_ID)'---获取User_ID属性返回strUser_IDEndGetSet(valueAsString)'---设置值strUser_ID=value'---传值并放入它在值参数EndSetEndPropertyPublicPropertyUser_KeyAsStringGetReturn(strUser_Key)EndGetSet(valueAsString)strUser_Key=valueEndSetEndPropertyEndClassConfigurationfile'--附:虽然时序图中只有几十行代码,现在理解还不够透彻。自己在实施过程中也遇到了很多问题,学到了很多,缺乏更多的实践去学习和发现问题。原文链接:http://blog.csdn.net/akkzhjj/article/details/8614726