分层开发的一点想法

lsfv00011 lsfv00011 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
一直按照petshop的分层来写.
但是写到后面,让别人用的时候自己很心虚.
比如一个工作人员表的model层.
public class lx_worker
{
public lx_worker()
{}
private int _id;
private string _w_name;
...


         public lx_worker(int id,string w_name)
{..}

         public int id
{
get{return _id;}
}...
}

那么 lx_worker myworker=new lx_worker();
代表什么?一个没有意义的对象
在程序中充斥着这种代码.
如果不小心,比如没有 myworker.w_name=...给工作人员添加名字.这样的操作.就进行插入操作.那肯定是出问题的。字段很多要一个一个检查.
所以感觉应该privite lx_worker()
{}
默认的构造函数应该去掉.
而去使用自定义函数
public lx_worker(int id,string w_name)
{..}
让 实体类都是有意义的类.

所以这也就让我们 dal 层添加数据的方法,不能再是 
void add(lx_worker myworker)
因为添加的时候.都没有一个有意义的实体.都是默认构造函数的实体.
我感觉应该 myworker add(string name){}结果是返回一个有意义的实体.


还有比如有些字段是不能更改比如用户登陆名字.这个就必须是只读的。如果存在一个默认的构造函数.那么new 了之后.那些只读字段怎么办?只读只能是初始化副直的.


分层写代码,按照一个表,一个实体对象的写法.总会有些操作感觉哪里有问题。
比如工作人员表格.又添加了一个工作人员更详细的表格,比如worker_detail
那么我们删除工作人员的时候,并没有把工作人员的详细信息删除.
(当然,数据库有级连删除会一起删除,但那属于数据库设计.不代表程序设计)

所以一个表对应一个实体又是不合理的。
以 woker组合detail 新加一个类.
goodworker
{
privite worker;
privite detail
}

而对应的方法 删除 .就是
del(int id)
{
(事务处理)
dal.detail.del(id);
dal.worker.del(id);
}

这又有一个问题.如果和工作人员的信息又有新的添加.比如工资信息.
那么我们又必须频繁修改goodworker的model和dal层.



感觉应该有些还是组合和接口会比较好点.
//model
public class workermodel
{
属性

workermodel(...)自定义构造函数
{
}

}


interface iworkeraction
{
del
{}
}

//dal
class worker:iworkeraction
{
//构造函数用model的构造函数
workermodel myworker;

worker(.....)
{
workermodel(...)自定义构造函数
}
overwriter del()
{}
}

//bll
abstruct abworker:worker
{
继承基类,
组合内部对象的方法 形成给外部的方法
}

程序中:abworker myworker=new worker(.....)
myworker.del(..)

不知道这样用会不会以后修改起来会比较好点。
自己感觉在平常的小程序中。这样还是会稍嫌麻烦.

...全文
评论 10
收藏 已收藏
分享
返回顶部
lsfv00011
.NET社区 62,272 成员 668,968 内容