三层架构问题 ~~~~~~~~在线等高手

lizuwu 2012-02-17 03:12:43
下边的程序为加学生或者老师,有2中写法,但是我不知道改用哪个?


Class 表
ClassID
ClassName班级名称

People表
PeopleID
Flag 标志,1,学生;2,老师
Name 姓名
Sex 性别

V_Student 视图
Name
ClassName
Sex

V_Teacher 视图
Name
ClassName
Sex

第一种写法


Web层
addStudent.aspx.cs
protected void btnAdd_Click(object sender, EventArgs e)
{
StudentInfo info = new StudentInfo();
info.Name = txtName.Text;
......
if (StudentBLL.AddStudent(info))
{
JScript.AlertAndRedirect("添加成功!", "ManageStudent.aspx");
}
}

addTeacher.aspx.cs
protected void btnAdd_Click(object sender, EventArgs e)
{
TeacherInfo info = new TeacherInfo();
info.Name = txtName.Text;
......
if (TeacherBLL.AddTeacher(info))
{
JScript.AlertAndRedirect("添加成功!", "ManageTeacher.aspx");
}
}

BLL层
(StudentBLL.cs)
public static bool AddStudent(StudentInfo info)
{
if (instance.AddStudent(info))
return true;
else
return false;
}
(TeacherBLL.cs)
public static bool AddTeacher(TeacherInfo info)
{
if (instance.AddTeacher(info))
return true;
else
return false;
}
DAL层
(StudentDAL.cs)
public bool AddStudent(StudentInfo info)
{

StringBuilder buffer = new StringBuilder();
buffer.Append("insert into People(Flag,Name,Sex) Values (@Flag,@Name,@Sex)");
SqlParameter[] parameters = {
new SqlParameter("@Flag",SqlDbType.Int,4)...};
parameters[0].Value = 1;
...
SqlDbHelper db = new SqlDbHelper();
return db.ExecuteNonQuery(buffer.ToString(), CommandType.Text, parameters) > 0;
}
(TeacherDAL.cs)
public bool AddTeacher(TeacherInfo info)
{
StringBuilder buffer = new StringBuilder();
buffer.Append("insert into People(Flag,Name,Sex) Values (@Flag,@Name,@Sex)");
SqlParameter[] parameters = {
new SqlParameter("@Flag",SqlDbType.Int,4)...};
parameters[0].Value = 2;
...
SqlDbHelper db = new SqlDbHelper();
return db.ExecuteNonQuery(buffer.ToString(), CommandType.Text, parameters) > 0;
}
DBUtility层
StudentInfo.cs
...
TeacherInfo.cs
...



第二种写法


Web层
addStudent.aspx.cs
protected void btnAdd_Click(object sender, EventArgs e)
{
PeopleInfo info = new PeopleInfo();
info.Name = txtName.Text;
info.Flag = 1;
......
if (PeopleBLL.AddPeople(info))
{
JScript.AlertAndRedirect("添加成功!", "ManageStudent.aspx");
}
}

addTeacher.aspx.cs
protected void btnAdd_Click(object sender, EventArgs e)
{
PeopleInfo info = new PeopleInfo();
info.Name = txtName.Text;
info.Flag = 2;
......
if (PeopleBLL.AddPeople(info))
{
JScript.AlertAndRedirect("添加成功!", "ManageStudent.aspx");
}
}

BLL层
(PeopleBLL.cs)
public static bool AddPeople(PeopleInfo info)
{
if (instance.AddPeople(info))
return true;
else
return false;
}
DAL层
(PeopleDAL.cs)
public bool AddPeope(PeopleInfo info)
{

StringBuilder buffer = new StringBuilder();
buffer.Append("insert into People(Flag,Name,Sex) Values (@Flag,@Name,@Sex)");
SqlParameter[] parameters = {
new SqlParameter("@Flag",SqlDbType.Int,4)...};
parameters[0].Value = info.Flag;
...
SqlDbHelper db = new SqlDbHelper();
return db.ExecuteNonQuery(buffer.ToString(), CommandType.Text, parameters) > 0;
}

DBUtility层
PeopleInfo.cs
...
...全文
3511 70 打赏 收藏 转发到动态 举报
写回复
用AI写文章
70 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 69 楼 karascanvas 的回复:]

引用 68 楼 muxingrenlgm 的回复:

三层架构本就是为了分离表述层和数据层的,中间的业务逻辑是两者的桥梁



这个说法就错了,都变桥梁了,可有可无的东西,还要来做什么。
还就是,楼主说的问题也跟分层无关。
[/Quote]
是的
种草德鲁伊 2012-02-25
  • 打赏
  • 举报
回复
[Quote=引用 68 楼 muxingrenlgm 的回复:]

三层架构本就是为了分离表述层和数据层的,中间的业务逻辑是两者的桥梁

[/Quote]

这个说法就错了,都变桥梁了,可有可无的东西,还要来做什么。
还就是,楼主说的问题也跟分层无关。
muxingrenlgm 2012-02-24
  • 打赏
  • 举报
回复
三层架构本就是为了分离表述层和数据层的,中间的业务逻辑是两者的桥梁
  • 打赏
  • 举报
回复
第二种
yangchun1213 2012-02-23
  • 打赏
  • 举报
回复
接分闪人……
XiaMinet 2012-02-23
  • 打赏
  • 举报
回复
认真看了回复,受益匪浅!
ITzhangweichao 2012-02-23
  • 打赏
  • 举报
回复
当然是第二种啊。只是一个flag不一样..不必写两个//
alian_1126 2012-02-23
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 sp1234 的回复:]

那些推销什么“生成器”的人必然给你对消为了三层而三层的所谓“设计”。你想啊,除了这个办法,他还有什么办法呢?因为现在的所谓“生成器”半点也不懂你要的业务逻辑啊!

如果你把精力都投入到这种扭曲的三层的概念中,将来真正需要三层架构的时候,你的时间和精力都花在错误的地方那个上了,根本无法高效率地进行系统设计和与沟通(因为你可能会听到一点新的设计想法就去纠结“增删改查怎么写”的沟里去了)。

……
[/Quote]支持
Delta 2012-02-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 lizuwu 的回复:]

第二种写法
[/Quote]asdfsdf
sindevil 2012-02-22
  • 打赏
  • 举报
回复
每次看sp1234的回复都会觉得受益匪浅啊
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 sp1234 的回复:]

引用 10 楼 lizuwu 的回复:

说了半天,感觉自己没有说明白。就是说三层架构到底要怎么处理,如果我这个例子只是一个学生的表,那么问题就很简单了,现在中间出现了好多别的因素,就不知道怎么用三层架构去处理了。是否有人碰到类似的情况?


所谓三层结构就是说你要单独花精力去设计业务逻辑层接口协议,这样不同的前端程序、不同的项目都可以共享一套业务逻辑服务实现。

跟什么代码生成器……
[/Quote]
受益匪浅
CODE163 2012-02-22
  • 打赏
  • 举报
回复
深切体会到 sp1234 的话。
caotoulei 2012-02-22
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 sp1234 的回复:]

那些推销什么“生成器”的人必然给你对消为了三层而三层的所谓“设计”。你想啊,除了这个办法,他还有什么办法呢?因为现在的所谓“生成器”半点也不懂你要的业务逻辑啊!

如果你把精力都投入到这种扭曲的三层的概念中,将来真正需要三层架构的时候,你的时间和精力都花在错误的地方那个上了,根本无法高效率地进行系统设计和与沟通(因为你可能会听到一点新的设计想法就去纠结“增删改查怎么写”的沟里去了)。

……
[/Quote]
+1, 建议楼主去理看下 “面向领域设计”。
xuan.ye 2012-02-21
  • 打赏
  • 举报
回复
我觉得在设计方面,c#应当多借鉴java的一些设计思想,不应当凭空的想象应用场景。

在大型项目的分层设计上,是为了分担压力而进行分层设计,采用EJB等框架进行业务压力分担。

但是一个teacher和student的项目,一看就没有必要这么做。

c#的项目这么做必要性不是特别大
xuan.ye 2012-02-21
  • 打赏
  • 举报
回复
好像没看到有什么区别,

这两种都不太好,尽量少的使用返回值,依靠异常来处理。

分层分的太厉害了,耦合度什么的没看出来,至于将来的事务处理,好像这样也做不到
wsjrzjp 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 sp1234 的回复:]
从你的问题中可以看出,你也是那种为了三层而三层三层的思路的受害者。这个时候追求所谓三层的“型”,但是你根本没有认真分析“实际业务应用领域”的业务逻辑到底是什么。除了“增删改查”你就不知道什么是真正的业务逻辑了?!

那么这时候不必去太在意所谓三层。如果你想做一个设计师,去多多理解不同的可能端开发的可能性,等有了经验再来进行业务逻辑封装。现在你就直接在表现层去调用DAL层好了!
[/Quote]

说的真,支持一下
广州接入 2012-02-21
  • 打赏
  • 举报
回复
数据访问层是针对数据的,因此最好要收紧数据访问接口,如果数据是数据库的,那么数据访问层最好是针对数据库对象,而不能针对业务对像(你的例子把老师跟学生看成了两个业务对象,如果处理逻辑确实不同,这样处理是可以的,但这种情况下你的实体类还是Person,你的方法名或者参数名可以区分老师和学生,一般情况下不赞成实体做过多的层次结构,因为通常情况下,实体是对应数据库对象的)。
实体,实体访问层(数据访问层),业务逻辑,数据库访问层,这种情况下,实体是原料,数据库访问是通道,实体访问是运输,业务逻辑是加工,典型的现代工厂模型。
广州接入 2012-02-21
  • 打赏
  • 举报
回复
数据访问层和业务逻辑层是肯定要分开的,虽然基本的逻辑在很多单表的情况下BLL似乎只是简单的调用DAL,但毕竟只是一部分,BLL处理业务逻辑,比如合法性检查,关联数据操作,事务处理等。而且更为关键的,BLL和DAL分离,使得BLL真正的脱离了数据操作,那么后面的数据是分布式存储,是数据库存储还是文件存储,或者是外部服务获取等都获得了极大的扩展性。过度分层是没有必要,但BLL,DAL,DBhelper分离是最基本的分层,而不是什么过度。
分层一定要有很强目的性的:dbhelper可以抽象异种数据库访问,或者分布式数据库访问。DAL则可抽象数据访问,使得改变具体数据来源变得透明。这在分布式模式下非常的有用。
种草德鲁伊 2012-02-21
  • 打赏
  • 举报
回复
if (bool)
return true;
else
return false;
}

好囧
chenyu_Csdn 2012-02-20
  • 打赏
  • 举报
回复
倾向于把老师和学生看成是同一类,那就是同一种业务逻辑,只是权限不同。新添加一个人,可以给老师和学生两种不同的权限。
加载更多回复(47)

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧