1,功能单一型
解释:比如一个软件是由
界面部分 User Interface+ 代码逻辑 Business Logic Layer+ 数据库部分 Data Access Layer
组成。
但是为什么一个常见的软件要搞得这么复杂?为什么不能把以上三种融为一体。这样不就避免了
【中间件】的学习成本了?
但是界面有winform html 这种标准极致的,和用户交互的;代码逻辑有许多编程语言来实现对数据完整性的约束;
数据库可以连接界面与数据。
而这些东西都在特定的方面做到极致,都有专注自己擅长的领域。它们组合起来就得到了完美的软件。即功能单一性。
大型企业组织结构的管理模式的优点:容错率高,可替换性强,上限高。
缺点:不灵活,效率低,速度慢。小型企业反之。
它借鉴企业组织结构的管理模式,实现的一种多人团队协作开发模式。
而多层结构与软件的组成结构有很多相似点。每个部分做好每个部分的事情,相互联系,一个地方出错,可以精确定位到
bug的地方,里面很多伪方法,各司其责,互不干扰,实现功能。
一个解决方案里添加了多个项目,而每个项目就做各自的事情,每个项目互相引用通过伪方法各自传值,进行数据的交流。
比如登录
1,界面 UI 2,判断账号密码 BLL 3,匹配数据库里的账号密码 DAL
UI界面需要用窗体,获得值就行了,再传给BLL层。
BLL层进行非空判断,再通过伪方法给 DAL层
DAL层进行匹配,得到返回数据,给UI层。
引用UI引用BLL,BLL引用DAL,DAL再引用ado.net 的类库。
```csharp
//下面是sql注入的一种,这种sql写法是有问题的,可以破解登录。
select count(*) from admin where id = '' and pwd = ' ' or '1' = '1 'public class DBHelper1{public static object GetData(string sql,SqlParameter[] paras){string address = "Data Source = .; Initial Catalog = MySchool; Integrated Security = True";using (SqlConnection con = new SqlConnection(address)){SqlCommand cmd = new SqlCommand(sql,con);con.Open();//参数化技术,取代字符串拼接cmd.Parameters.AddRange(paras);return cmd.ExecuteScalar();}}}private void button2_Click(object sender, EventArgs e){string sql = "select * from admin where loginid = @id and loginpwd = @pwd";SqlParameter[] paras = new SqlParameter[] {new SqlParameter("@id",textBox1.Text),new SqlParameter ("@pwd",textBox2.Text)};int i = Convert.ToInt32(DBHelper1.GetData(sql, paras));if (i > 0)MessageBox.Show("验证成功,不会遭到sql注入!");}
//缺点是不能看到 参数 要再数据库 sql server profiler看
其它层,帮助层,暂时叫实体层。ENTITY
对其它三层起辅助作用的层。
比如设计一个方法,如果参数很多,就很复杂,但是把这些参数,放到一个类,把这个类放入实体层。
这时参数就是一个object 的类了,返回值可以是泛型集合。
这样,提高了代码的复用率了。
写在最后:
用多层结构开发软件的详细步骤
1,对数据表进行需求分析,各种业务,想象功能点
2,搭建基本多层结构,正确的让其相互应用
3,针对你的需求分析,设计伪方法
4,实现伪方法和功能
通用的规范标准是十分重要的。
1,一个数据表必须在实体层中存在一个实体类用于对其它层作辅助,传值的载体
2,这个类中有按要求的属性,字段,构造
3,每个层的命名规范 表名-DAL 表名-BLL
4,一个类必须至少5个方法 Get() Get(string id) Update() Add() Delete()
其它的方法灵活变通。