求教,关于WinForm项目,重构上的有些思路,困惑,求解答

张天星 2018-11-07 05:54:26
我写了一个项目,在功能都实现了以后,我检查了一下代码,乱七八糟,就想着去重构它,遇到了一些问题。
项目有一个UI层,是WinForm.
有一个Model层,是存放数据表的,用的是EF的CodeFirst
有一个BLL层,是用来处理业务逻辑的,一些是针对Model表某个表的操作,一些是针对多表之间的操作。
而db数据库访问,我在UI中有直接访问数据库,在BLL中,自然也有访问数据库的,现在有些问题。。
1、数据库访问方面,要不要强制的只有BLL层才可以访问,UI想要操作数据,都通过BLL中转?还是UI自己想写数据就写数据,随意?
2、BLL中,一些针对单个表的简单操作,比如单表增删改查之类的,可以直接写到Model中么?
3、如果Model中不能写方法,那么针对某个Model的扩展方法应该怎么写?

这个是我大概表现出来的,这两天准备修改的代码,但遇到了问题,求建议:
    //CodeFirst
public class UserModel
{
public UserModel() { }
public int Id { get; set; }
public string Name { get; set; }
}
//对Model的操作方法
public class UserBLL : UserModel
{
public UserBLL() { }
//做一些删除操作,包括级联处理等
public bool Delete(IRepository db) { return true; }
//做一些查找操作
public UserModel FindByName(IRepository db,string name) { return new UserModel(); }
//做一些新增校验,比如某些字段不允许为空
public bool Add(IRepository db) { return true; }
//。。。如此等等,都是针对userBLL的操作
}
public class FormMain
{
//这是一个EF对象,操作数据库的
IRepository db = db_Fictions.Create();
public void Main()
{
int id = 1;
//问题就出在这里,UserModel是不可以直接转成UserBLL的。
UserBLL userBLL = db.Find<UserModel>(id);
userBLL.Delete(db);
}
}


这个是我的项目,求指点:https://gitee.com/zzwtx/FictionsDownload.git
...全文
64 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
张天星 2018-11-07
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
像代码
public class UserBLL : UserModel
这类非常清楚地可以看出,你完全是昏了头啦。BLL 服务怎么可能是从 Model 继承的?

例如你可以写代码

public static List<联系次数统计结果> 查询一些人的好友以及最近联系次数(User[ ]  users)
{
.......
}

这是 BLL 中的功能方法。

Model 是 BLL 中方法的输入输出参数。BLL类型怎么可能从 Model 继承?这是什么逻辑呢?

心好累,果然是不能直视的代码。。。
先结贴了,等我重构一遍完再来求教。
  • 打赏
  • 举报
回复
像代码
public class UserBLL : UserModel
这类非常清楚地可以看出,你完全是昏了头啦。BLL 服务怎么可能是从 Model 继承的? 例如你可以写代码
public static List<联系次数统计结果> 查询一些人的好友以及最近联系次数(User[ ]  users)
{
    .......
}  
这是 BLL 中的功能方法。 Model 是 BLL 中方法的输入输出参数。BLL类型怎么可能从 Model 继承?这是什么逻辑呢?
  • 打赏
  • 举报
回复
我不知道你说的 Model层是个什么概念?! Model 是简单的“失血模型”,也就是描述跨层的简单数据结构,Model 不取代 BLL。Model 中怎么可能写数据库操作语句?
  • 打赏
  • 举报
回复
UI 访问 BLL 层编程接口(API),UI层不能假设有没有数据库、有几个数据库、有什么数据库。UI层代码不与数据库打交道。

110,524

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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