Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在定义存储库接口时避免核心层引用DAL

在定义存储库接口时避免核心层引用DAL
EN

Software Engineering用户
提问于 2017-08-13 11:12:14
回答 1查看 1.3K关注 0票数 1

我正在尝试学习N层体系结构和其他一些东西,并且我有一个C#解决方案,其中我有以下几个层:

  • 核心/基础设施(文件夹)
    • 核心(项目)
      • 服务接口
      • 域模型
      • 存储库接口

  • 业务逻辑层(文件夹)
    • 服务(项目)
      • 不同服务

  • 数据访问层(文件夹)
    • DatabaseAccess (项目)
      • 通过实体框架从现有数据库生成的实体
      • 不同存储库

  • 表示层(文件夹)
    • Shell (使用棱镜的项目)
    • 不同的模块(作为棱镜模块的多个项目)

这个设置看起来正确吗?

它应该很像下面的图像:

当像这样构造时,它看起来非常松散耦合,但是,当我想为一个实体定义一个存储库接口时,就会出现一个问题。问题显然是,为了在接口中使用实体,我必须引用DAL项目.我不知道我哪里出了问题,也不知道该采取什么措施来纠正这个问题。

Core.Repositories中的通用存储库接口:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface IRepository<TEntity> where TEntity : class
{
    TEntity GetByID(int ID);
    IList<TEntity> GetAll();
    IList<TEntity> Find(Expression<Func<TEntity, bool>> predicate);

    void Add(TEntity entity);
    void AddRange(IList<TEntity> entities);

    void Update(TEntity entity);

    void Remove(TEntity entity);
    void RemoveRange(IList<TEntity> entities);
}

将出现上述问题的存储库接口示例(也是在Core.Repositories中):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
interface IChildRepository : IRepository<ChildEntity> //In order to use ChildEntity I would have to add a reference to the DAL project
{
    IList<Child> GetAllChildren();
}

因此,总之,在这种情况下,我不应该使用存储库模式,或者我可以采取哪些步骤来纠正这个问题?

更新:

我看过的关于存储库模式的视频有些不正确,这也是我对模式的理解出现错误和代码中出现错误的原因。我从找到一篇关于存储库模式的非常好的博客文章中找出了问题所在。

我正在创建特定的存储库,但我使用通用存储库作为助手,这样就不需要重复诸如"GetAll“、”添加“或”查找“之类的东西。

在定义我的接口时,我应该这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
interface IChildRepository
{
    IList<Child> GetAllChildren();
}

然后在我的班上

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class ChildRepository : Repository<ChildEntity>, IChildRepository
{
    IList<Child> IChildRepository.GetAllChildren() => GetAll().ToModels();
}

显然,我需要重复一些代码,比如"GetAllChildren“、"GetAllParents”等等--我想我只能接受这些了。

EN

回答 1

Software Engineering用户

发布于 2017-08-13 11:40:33

这是正确的。但是您的存储库应该返回业务对象,而不是数据库“实体”。

次要点。泛型存储库在某种程度上受到了反对。最好是拥有特定的存储库,其方法允许您充分利用数据库来检索所需的确切数据。

简化图

  • 模型和接口(核心)无依赖关系
  • 存储库、引用模型
  • App (表示层?)、参考模型和存储库
票数 5
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/355608

复制
相关文章
Docker部署_docker部署网站
我们都爱用 WordPress,(几乎)一行代码都不用写,就能得到一个好看、实用的动态网站。
全栈程序员站长
2022/11/17
9150
Docker部署_docker部署网站
常用的做网站软件、网站制作软件分享
网站制作中用到的软件很多,针对前端开发人员的有Dreamweaver,图片软件有Firework和photoshop,正对后端的开发软件更多,不同的开发语言用到的软件都不一样,如果您不是开发人员,只想做网站的话可以去下载网站管理系统来做,比如国内的PageAdmin系统,Discuz系统等等都是很不错的建站系统,下载下来不需要什么经验就可以自己做网站。
用户4831957
2019/10/19
7.7K0
【网站部署】解析二级域名并部署网站
解析二级域名 : 我是在 阿**上申请的 阿**的服务器, 响应的域名也托管到了 阿**旗下的万网上, 因此在万网上解析了二级域名;
韩曙亮
2023/03/27
2.2K0
【网站部署】解析二级域名并部署网站
使用HHDESK部署网站
本篇接着这个思路,详细讲述一下网站部署,一个原本麻烦,但通过HHDESK的处理之后变得简单的工作。
恒辉信达技术有限公司
2023/07/03
1870
使用nginx部署网站
如果服务器只需要放置一个网站程序,解析网站到服务器的网站,网站程序监听80端口就可以了。如果服务器有很多应用,借助nginx不仅可以实现端口的代理,还可以实现负载均衡。本文将详细介绍前端及nodeJS项目在服务器配置时需要用到的nginx配置。
java思维导图
2019/11/05
2.7K0
Docker-网站部署实践
1.网站开发完成之后进行发布,.net开发的网站可以使用dotnet命令进行发布。
kdyonly
2023/03/03
1.2K0
Docker-网站部署实践
把网站做成软件
刚接触电脑那会,对软件的了解不如现在来的深切 ,那时候软件两个字在我脑海中的概念就是通过搜索引擎搜索结果或直接在浏览器地址栏中输入网址进入获取我需要的软件的网站,然后寻找下载这个软件的按扭,点击下载软件。在某些提供软件下载的网站中,这个下载按扭往往不是显而易见的容易找到, 经常被其它下载莫名其妙资源的按扭干扰,需要费很大一番力气才能把需要的软件下载下来。下载下来的软件是一个几M到几G不等的安装包文件, 点击打开它,然后按照界面上的安装向导指示安装完成后就能使用了。软件有各种各样的功能, 能听音乐、制作图表、
用户1608022
2018/04/11
1.2K0
CentOS部署.NET Core网站
https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-centos
TOMD
2022/08/10
1.2K0
CentOS部署.NET Core网站
使用Fabric部署网站应用
以前一直用rsync同步代码到服务器,这种山寨方法用一次两次还可,每天部署10次就麻烦了,最近抽空研究了一下Fabric,发现这个东西部署起来简直太爽了。
星哥玩云
2022/07/03
1.6K0
CentOS部署.NET Core网站
安装 .NET 之前,请运行以下命令,将 Microsoft 包签名密钥添加到受信任密钥列表,并添加 Microsoft 包存储库。 打开终端并运行以下命令:
TOMD
2022/08/01
6440
CentOS部署.NET Core网站
使用nginx部署网站教程
如果服务器只需要放置一个网站程序,解析网站到服务器的网站,网站程序监听80端口就可以了。如果服务器有很多应用,借助nginx不仅可以实现端口的代理,还可以实现负载均衡。本文将详细介绍前端及nodeJS项目在服务器配置时需要用到的nginx配置。
用户4283147
2022/10/27
2.1K0
使用nginx部署网站教程
GitPages部署自己的网站
该文章主要为了记录我如何在GitPages上面部署博客网站,这里的话,码云上面也有相同的功能。 若有小伙伴担心GitHub担心把中国的访问也禁了的话(大概不会吧),可以在码云上面部署。流程应该是差不多的。 因为我使用的域名是.cn后缀,所以部署到GitHub上面就不用备案了。码云是国内的,应该要备案了,这个就看各位小伙伴的选择了。 可以看看我的网站:
Johnson木木
2021/12/24
1.5K0
GitPages部署自己的网站
使用Fabric部署网站应用
以前一直用rsync同步代码到服务器,这种山寨方法用一次两次还可,每天部署10次就麻烦了,最近抽空研究了一下Fabric,发现这个东西部署起来简直太爽了。 Fabric是一个用Python开发的部署工具,最大特点是不用登录远程服务器,在本地运行远程命令,几行Python脚本就可以轻松部署。 花10分钟写了一个部署脚本fabfile.py(名字不能变),放到工程目录下: #!/usr/bin/env python # -*- coding: utf-8 -*- from datetime import da
小小科
2018/05/02
1.1K0
【Zabbix】部署监控软件
[root@srv-tz ~]# systemctl enable --now httpd
Xiongan-桃子
2023/06/10
6280
【Zabbix】部署监控软件
1分钟部署vue静态网站,借助云开发静态网站部署属于自己的网站
这也就意味着,我们的网站可以供用户在任何地方访问。下面就来教大家如何快速的部署一个属于自己的网站。
编程小石头
2021/01/12
3.5K1
1分钟部署vue静态网站,借助云开发静态网站部署属于自己的网站
轻松部署Odoo软件
本文档由 Websoft9 公司提供,用于指导用户学习 Odoo 的安装部署与基本运维技术,包括:Odoo部署、初始化安装、环境配置、HTTPS、SMTP、备份升级和连接云服务器操作等基本操作。
网久软件
2021/05/29
5.1K0
轻松部署Odoo软件
使用WebDeploy部署远程IIS网站
目录 使用WebDeploy部署远程IIS网站 后台服务部署 服务器配置 本地WebDeploy发布文件配置 前端页面部署 WebDeploy服务端配置 WebDeploy发布文件配置
心莱科技雪雁
2019/08/20
2.9K0
使用WebDeploy部署远程IIS网站
PythonAnyWhere免费部署python类网站
在执行部署Django网站之前,应该先处理好前期工作,比如对settings.py文件进行设置以防止私密信息泄露等。本文只是简单的笔记,原文地址为:https://tutorial.djangogirls....
晓歌
2018/08/15
7.8K0
PythonAnyWhere免费部署python类网站
Apache Tomcat服务部署网站
Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成.由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现,因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器.
微软技术分享
2022/12/28
6570
常用软件和网站
An excellent open source blog project:Halo
飞翔的竹蜻蜓
2020/07/07
1.1K0

相似问题

网站问答软件

50

网站广告软件

13

网站恶意软件

23

订阅网站软件

14

网站部署

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文