学习三层架构时遇到的问题

leon51 2019-09-05 10:51:08
不好意思第一次发这么多代码,想问两个问题:
1,BLL层的"dal"怎么获取?
2,DAL层中若有多个实体怎么处理?

BLL层
namespace PP.BLL
{
public abstract class BaseService<T> where T : class, new()
{
//问题一:dal怎么获取取?
public bool Delete(T entity)
{
return dal.Delete(entity);
}
//其余代码略
}
}

namespace PP.BLL
{
public partial class JobService : BaseService<Job>, IJobService
{
}
public partial class UserService : BaseService<User>, IUserService
{
}
}

IBLL层
namespace PP.IBLL
{
public interface IBaseService<T> where T : class, new()
{
//CRUD,代码略
}
}

namespace PP.IBLL
{
public interface IJobService : IBaseService<Job>
{
}
public partial interface IUserService : IBaseService<User>
{
}
}

DAL层
namespace PP.DAL
{
public class BaseDal<T> where T : class, new()
{
PPEntities db = new PPEntities();//问题二:若有多个实体,如何变换?
//CRUD,代码略
}
}

namespace PP.DAL
{
public class JobDal : BaseDal<Job>,IJobDal
{
}
public class UserDal: BaseDal<User>,IUserDal
{
}
}

IDAL层
namespace PP.IDAL
{
public interface IBaseDal<T> where T : class, new()
{
//CRUD,代码略
}
}

namespace PP.IDAL
{
public interface IJobDal : IBaseDal<Job>
{
}
public interface IUserDal : IBaseDal<User>
{
}
}

...全文
788 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2019-09-10
  • 打赏
  • 举报
回复
这套东西,总体上就是仿造人类社会分工协作 而这个玩意,俺们老祖宗一向玩的清楚,最典型就是中医。 采药的,制药的,采购的,进了药店就是一排药架子,老中医坐堂只看病开药,你拿着药房去找柜台抓药,你要不想自己熬药药店帮你熬药 这玩意哪有啥这个IXXX,那个xxxAL。只是说每个人只干自己的事情,每个人遵守自己的规矩。 BIL只干bil的事情,我不管你从那里个库来的,也不管你是否是EF还是ado.net。 没有什么IDL,DAL一堆有的没的,理论上就是一句数据库代码都没有,你BIL都能跑起来,这才是BIL,这才是大厨,老中医的职责。(老中医看病,开药,不管抓药,煎药。大厨炒菜调味,控火候,不管采购,切菜)
wanghui0380 2019-09-10
  • 打赏
  • 举报
回复
如果说数据库是菜市场/仓库,dal是洗菜,切菜的。Bil是配菜,炒菜的 你觉着怎么样,你们的问题是非要把一个原本很正常的逻辑,生拉硬拽的搞些不知所谓的东西 既然是配菜,炒菜。你告诉我有什么到了dal不知道怎么写了的道理。你告诉我你要炒什么菜? “龙虾鲍鱼羹”?那好把龙虾找出来,把鲍鱼找出来,菜谱上怎么写就怎么做。 本来正常的事情,你们一弄就反而一点都不正常了。都是人类,请按人类的做事方式去写代码。 老板做菜品,采购的根据菜品卖原材料,洗菜,切菜的按照食材特性处理,配菜的根据菜单配菜,大厨根据口味要求做菜。 本来就是很正常的逻辑,你们一套(IXX,XAL)结果是什么?结果是net公司,net小组被你们给玩废了。 你们号称统一,标准化,流水线。哦,人类的标准不统一,人类的馆子不是这样做的?这还不统一,什么叫统一。 所以,请放弃这种方式,请正儿八经的用人类的脑袋想问题好不好
leon51 2019-09-10
  • 打赏
  • 举报
回复
引用 13 楼 caozhy 的回复:
你这个是伪三层,要分层,就要用接口,每一层依赖接口,而不是直接依赖类,否则还分层干嘛
层与层之间我是加了接口的,难点在于写到bll层不知怎么写了
leon51 2019-09-10
  • 打赏
  • 举报
回复
引用 12 楼 吾友客 的回复:
BLL中要获取DAL的方法,那么首先你就需要在BLL中添加引用DAL,当然如果DAL中的存在多个实体,怎么办,这个时候就需要使用依赖注入了,依赖具体的实现,后续如果存在数据库,只需要重新注入该数据库的接口,就可以调用了; 你可以去看看依赖注入
恩,对照视频学习的时候是使用依赖注入,但实际项目不打算用。
leon51 2019-09-10
  • 打赏
  • 举报
回复
引用 10 楼 正怒月神 的回复:
[quote=引用 8 楼 leon51 的回复:] [quote=引用 4 楼 正怒月神 的回复:] 1 dal肯定有声明的地方,不管是依赖注入的还会new出来的。 一般来说应该是BaseDal<T> dal; 2 PPEntities db = new PPEntities();这个不是实体,是数据上下文 你f12转过去看,他是一个DbContext。 真正的实体是 你看PPEntities 下面的 DbSet<实体>
版主见笑了,我是想连接两个不同服务器的sql server数据库,请问这种情况下怎么做?谢谢[/quote] 一般来说,这种就是3个解决方案, 1 创建2个dbcontext。也就是两个ef的数据连接上下文 2 使用数据库的同义词的方法,跨库访问。(这种我是不推荐的,维护特别困难。) 3 使用database.SqlQuery<Model>("sql")方法来写sql语句,然后会自动映射到model。(这种适合少量sql跨库的,因为他本身不支持主外键关联查询)[/quote] 感谢你非常专业的回复,解答我了其中的一个问题
皮皮熊_1989 2019-09-10
  • 打赏
  • 举报
回复
不要为了三层架构而三层架构; 三层架构只是一个蓝本,让你了解多层次分层设计,并不是每个项目都适用; 既然说到了,我只说一个推荐,实例化的时候不要用new XXX这种去搞了,太基础,推荐你看看依赖注入方面的文章(如Unity和Autofac,可以看看,注意,Unity不是动画的那个Unity,是依赖注入的,不要搞错。);
luj_1768 2019-09-10
  • 打赏
  • 举报
回复
两数据库合组才需要有关资料,通常都是使用xml、ado、sql,实现各个层面上的数据库互通。
wanghui0380 2019-09-09
  • 打赏
  • 举报
回复
没必要纠结,当把做饭分层了,洗菜,切菜,配菜,炒菜这么个玩意的时候 你问我们我想炒个肉丝,打算用胡萝卜丝+青椒丝+肉丝,不知道怎么办了? 你们不知道怎么办了,其实是因为,你们太纠结了。非要把胡萝卜丝不叫胡萝卜丝,而要叫“精细化流水线丝状材料--胡萝卜类型”
正怒月神 版主 2019-09-09
  • 打赏
  • 举报
回复
引用 8 楼 leon51 的回复:
[quote=引用 4 楼 正怒月神 的回复:] 1 dal肯定有声明的地方,不管是依赖注入的还会new出来的。 一般来说应该是BaseDal<T> dal; 2 PPEntities db = new PPEntities();这个不是实体,是数据上下文 你f12转过去看,他是一个DbContext。 真正的实体是 你看PPEntities 下面的 DbSet<实体>
版主见笑了,我是想连接两个不同服务器的sql server数据库,请问这种情况下怎么做?谢谢[/quote] 一般来说,这种就是3个解决方案, 1 创建2个dbcontext。也就是两个ef的数据连接上下文 2 使用数据库的同义词的方法,跨库访问。(这种我是不推荐的,维护特别困难。) 3 使用database.SqlQuery<Model>("sql")方法来写sql语句,然后会自动映射到model。(这种适合少量sql跨库的,因为他本身不支持主外键关联查询)
threenewbee 2019-09-09
  • 打赏
  • 举报
回复
你这个是伪三层,要分层,就要用接口,每一层依赖接口,而不是直接依赖类,否则还分层干嘛
吾友客 2019-09-09
  • 打赏
  • 举报
回复
BLL中要获取DAL的方法,那么首先你就需要在BLL中添加引用DAL,当然如果DAL中的存在多个实体,怎么办,这个时候就需要使用依赖注入了,依赖具体的实现,后续如果存在数据库,只需要重新注入该数据库的接口,就可以调用了;
你可以去看看依赖注入
leon51 2019-09-06
  • 打赏
  • 举报
回复
MVC我简单地自学过,使用MVC是要把原来的dal、bll层放在Model层吗? 我要做的这个东西不算太大也不是太小。 给个例子吧,或者像上面写个大概的框架,不用具体的代码,非常感谢,
leon51 2019-09-06
  • 打赏
  • 举报
回复
引用 4 楼 正怒月神 的回复:
1 dal肯定有声明的地方,不管是依赖注入的还会new出来的。 一般来说应该是BaseDal<T> dal; 2 PPEntities db = new PPEntities();这个不是实体,是数据上下文 你f12转过去看,他是一个DbContext。 真正的实体是 你看PPEntities 下面的 DbSet<实体>
版主见笑了,我是想连接两个不同服务器的sql server数据库,请问这种情况下怎么做?谢谢
leon51 2019-09-06
  • 打赏
  • 举报
回复
引用 3 楼 tangyanzhi1111 的回复:
三层基本上用不到 现在用的都是 三层的UI层的一个分层 也就是 MVC 这个才是比较流行的 假如说你项目不是非常巨大,大到要登陆月球那么巨大 那么 MVC足够了
引用 5 楼 exception92 的回复:
三层用的不多了吧,用MVC框架。了解asp.net core mvc 吧
引用 6 楼 风吹腚腚凉 的回复:
EF本身就是dal层,还写个毛DAO层
感觉受到了一万点暴击,毕竟花了那么多时间,而我的时间太奢侈,只有偶尔晚上挤出一点时间。 那么大家有没有一些经典的例子或博客文章推荐,谢谢
风吹腚腚凉 2019-09-06
  • 打赏
  • 举报
回复
EF本身就是dal层,还写个毛DAO层
exception92 2019-09-06
  • 打赏
  • 举报
回复
三层用的不多了吧,用MVC框架。了解asp.net core mvc 吧
正怒月神 版主 2019-09-06
  • 打赏
  • 举报
回复
1 dal肯定有声明的地方,不管是依赖注入的还会new出来的。
一般来说应该是BaseDal<T> dal;
2 PPEntities db = new PPEntities();这个不是实体,是数据上下文
你f12转过去看,他是一个DbContext。
真正的实体是 你看PPEntities 下面的 DbSet<实体>
江湖评谈 2019-09-06
  • 打赏
  • 举报
回复
三层基本上用不到 现在用的都是 三层的UI层的一个分层 也就是 MVC 这个才是比较流行的 假如说你项目不是非常巨大,大到要登陆月球那么巨大 那么 MVC足够了
大鱼> 2019-09-06
  • 打赏
  • 举报
回复
首先你要new一个对象,这个对象呢就是你的DAL
Dear200892 2019-09-06
  • 打赏
  • 举报
回复
1:首先在BLL层引用DLL层,将你需要调用的dll类实例化

BaseDal dal=new  BaseDal();
在BLL中使用:

        public bool Delete(T entity)
        {
            return dal.Delete(entity);
        }

62,046

社区成员

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

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

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

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