在学习了.net core基础之后就需要对这些知识灵活运用了,代码不会写那么很简单,谷歌、必应、百度,总有一个能搜到的嘛,那么架构上的,似乎很少有这方面的资料,而且是在国内.net core资料本来就少的情况下,那我在这里就给大家分享一个架构,不管是.net core还是.net framework都可以用这个架构的:
想必有很大一部分人写代码是这样写的吧,每一个方法中去new一个bll对象出来,也可以在方法外部实例化这个对象,不管项目中服务层是叫BLL还是叫Service,其实都是同一个东西,如果分的再细一点的话,会有一个IBLL或者IService出现,当然这个在一些中小项目中用不到,而我要说的方式并不是这样,请看下面
这个Service是什么东西呢?再看
这样似乎就很好理解了吧,可能有人会说,为啥要静态的呢?那这里我来告诉大家,因为这个T类我是用来操作数据库的一个类,既然是操作数据库的,那么就需要释放这个对象,什么时候释放呢?我的做法是在请求结束返回结果前释放这个对象
因为每一个请求都是一个实例,请求结束的方法在过滤器中,而我并不可能在这里面去实例化一个BaseController,那么就需要将释放数据库实例的方法做成静态的,这样就可以直接调用了,或许又有人会说,这样不是耦合起来了吗?没错,是耦合了,但这个耦合并不涉及到业务的,都是同一层的两个类有一点小小的耦合罢了,相比于每个控制器都需要去实例化数据库操作对象的方式,我更喜欢用前者,不管是代码量还是架构方面。或许还有人说,你这种只适用于单业务的,也就是一个控制器只操作一张数据库表,那要有多个怎么办呢?我的解决方案是:在Service层中让他们自己耦合,不在web层做这种耦合
当然还有一种方式,那就是:依赖注入
在学习.net core的时候,了解到著名框架ABP,看了里面的代码发现,它的业务层就是通过注入的方式传到web层的。请看
我个人觉得没必要用这种方式,我觉得注入的方式用于变化的需求,比如,有一个需求是数据库不定,也就是切换数据库,在controller的构造函数中传入一个对象,这个对象可能是sqlserver的,也可能是mysql的,还可能是Oracle的,那这个时候用注入的方式就很好了,需要切换的时候只是在注入的地方变化一下就好了,controller中的代码不需要任何变化,再或者说,有一个cache的controller,可能是管理redis的也可能是memcahe的,还可能是httpruntime的,这里用注入也是一样的道理,只需要变化一个地方就可以轻松实现切换了
如果你们有更好的方法欢迎留言评论??
原文:https://www.cnblogs.com/zlheb/p/11561273.html