在 n 层系统中,您应该从数据访问层向业务层返回哪些对象

2024-04-03

例如,如果您有一个名为 Person(ID、Name 等)的数据库表,数据访问层应将什么样的对象返回给业务层? 我在想这样的事情:

//data access tier
public class DataAccess{

   public interface IPerson{
      int ID{ get; set; }
      string Name{ get; set; }
   }

   internal class Person : IPerson{
      private int id;
      private string name;

      public int ID{ get{return id; } set{ id=value; } }
      public int Name{ get{retutn name; } set{ name=value; }
   }

   public static IPerson GetPerson(int personId)
   {
      //get person record from db, populate Person object
      return person;  
   }
}

//business tier
public class Person : IPerson{
   private int id;
   private string name;

   public int ID{ get{return id;} set{id=value;} }
   public string Name{ get{return name;} set{name=value;} }

   public void Populate(int personId){
      IPerson temp = DataAccess.GetPerson(personId);
      this.ID = temp.ID;
      this.Name = temp.Name;
   }
}

但这一切似乎有点麻烦?对于这个问题有更优雅的解决方案吗?我应该从数据访问层返回一个 DataRow 到业务层吗?


您无需在数据访问层 (DAL) 中重复类定义。

您可以在单独的程序集中将业务实体创建为“哑”容器,例如你的 Person 类可以是:-

public class Person
{
    int ID { get; set: }
    string Name { get; set: }
}

然后,您可以为 DAL 提供对业务实体层的引用。您的控制器对象,无论它们是在单独的业务逻辑层中,还是在 UI 层中,都可以只调用 DAL,它可以创建业务实体,从数据库填充它并将其返回到您的控制器。

本文 http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=476Imar Spaanjaars 对这种模式做了很好的解释。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 n 层系统中,您应该从数据访问层向业务层返回哪些对象 的相关文章

  • 过度使用委托对性能来说是一个坏主意吗? [复制]

    这个问题在这里已经有答案了 考虑以下代码 if IsDebuggingEnabled instance Log GetDetailedDebugInfo GetDetailedDebugInfo 可能是一个昂贵的方法 因此我们只想在调试模式
  • 在C#中的某个单词之后/之前过滤字符串中的值

    我有很长的字符串 它们是 IMAP 请求的响应 我想从中提取一些值 它通常的格式类似于 x someword 或 someword x 如何获取某个单词 已知 的x 它可以超过一位数字 响应的每一 行 如下所示 x someword r n
  • 当从属文本框中没有输入文本时,如何让 gridview 显示所有表格行?

    下面的代码可以正常工作 并根据文本框中输入的文本过滤我的网格视图 当我的文本框中没有输入任何文本时 我没有得到任何结果 并且无法理解为什么 我的问题 如何让gridview显示all当文本框中没有输入文本时表行 MSSQL Search n
  • 动态 C#.NET Web 服务

    我在 C ASP NET 项目中使用一个类 允许用某种随机脚本语言编写的脚本动态公开 Web 服务方法 换句话说 该脚本应该能够公开具有任何签名的任何名称的方法 只要因为它是有效的 无论如何 通过这个 SOAP 接口向外界发送 能够随意添加
  • 名称在当前上下文中不存在

    所以 我正在我的笔记本电脑和台式机之间完成这个项目 该项目在笔记本电脑上运行 但现在将更新的源代码复制到桌面上后 我的项目中有超过 500 个错误 所有这些错误都是 该名称在当前上下文中不存在 这是一个例子 职位 aspx
  • 是否可以调整AppFabric缓存服务器来存储更大的对象?

    当我假设将较大的对象图添加到缓存中时 我收到 AppFabric 缓存服务器错误 错误代码 子状态 连接已终止 可能是由于服务器或网络问题或序列化对象大小大于服务器上的 MaxBufferSize 请求的结果未知 我确信这不是网络问题 我能
  • 如何在Web网格的列中编写IF条件

    我在 WEB GRID 列中创建 if 条件时遇到错误 所以 请帮助改进我的代码并解决我的问题 grid Column Status format item gt
  • 如何在 sql server 中加密数据并在 .net 应用程序中解密

    我想加密 sql server 中的一些密码并让 c 应用程序解密它们 显然 我可以创建一个 SP 来解密所需的密码并将其传递给 c 应用程序 但这意味着通过网络发送明文密码 因此 我希望能够在 sql server 中加密我的密码 使用密
  • 使用 DependencyResolver 通过 MVC 3 进行控制器实例化时出错

    我正在使用 MVC 3 并在应用程序启动时使用以下代码 UnityContainer container new UnityContainer new UnityMappings container DependencyResolver S
  • 模拟 WCF 客户端代理的最佳方法

    有没有办法使用 Rhino 模拟框架来模拟 WCF 客户端代理 以便我可以访问 Channel 属性 我正在尝试对 Proxy Close 方法进行单元测试 但由于代理是使用抽象基类构造的ClientBase
  • 获取GridView中选定行的索引

    我想使用复选框获取从 gridview 选择的行 复选框是这样的
  • Lazy 实现和 .NET 泛型

    我正在寻找进行延迟初始化的方法并发现Lazy
  • 有没有办法在不重新编译的情况下覆盖 .NET Windows 服务名称?

    我有一个 Windows 服务可执行文件 我知道它是用 NET 编写的 我需要将其安装在不同的服务名称下以避免冲突 安装无论如何都不提供指定服务名称 如果我只能访问二进制文件 当我使用 installutil 安装它时是否可以覆盖服务名称
  • 将 Windows 窗体应用程序转换为 Asp.net

    我问的是 您之前使用的将 C Windows 窗体应用程序转换为 ASP NET 的最佳工具是什么 我已经关于这个主题 发现了很多工具 但我希望有人根据他的使用情况推荐最好的工具 我真的不建议使用工具来进行转换 Web 应用程序和 WinF
  • .Net应用程序设置路径

    默认情况下 Windows 应用程序设置保存在该目录中 USERPROFILE Local Settings Application Data
  • 使用 asp.net 发送 20,000 多封电子邮件

    我正在编写一个应用程序 需要向从我们的数据库中选择的学生发送大量电子邮件 每封电子邮件都将进行个性化 包括他们的姓名 学习课程等 因此需要一次发送一个 我可以在 SmtpClient 上循环执行此操作 但我担心我尝试发送的数字最终会遇到超时
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 如何在不同的分辨率/屏幕上提供相同的应用程序

    Scenario 您需要在不同的屏幕上展示相同的应用程序 假设标准的 15 英寸 17 英寸 便携式 10 英寸和移动 4 英寸 可能在不同的分辨率下工作 Question 您是否尝试采用一种根据可用空间重新排列的流动布局 或者您是否滚动
  • oracle ExecuteNonQuery 在 ASP.Net 上冻结

    我正在尝试使用 ASP C 和 CLR 4 5 中的 Oracle 连接来运行非查询 这是我的代码 string connectionString ConfigurationManager ConnectionStrings OracleC
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 使用 BeautifulSoup 一次循环解析段落和后续元素

    我有一长串博客评论 编码为 p This is the text br of the comment p div Here the details of the same comment div 我需要在循环的同一周期中解析注释和详细信息
  • VSO REST API - 获取用户个人资料图像仅适用于基本身份验证?

    我正在使用VSO 休息 API让所有成员加入团队 从那里我得到ImageUrl的成员 如果我只是将图像控件绑定到ImageUrl它是空白的 因为VSO要求我登录才能获取个人资料图片 所以我创建了一个HttpClient并设置我的Author
  • 创建计划任务

    我正在开发一个 C WPF 项目 我需要允许用户创建计划任务并将其添加到 Windows 任务计划程序 我怎样才能做到这一点以及我需要什么使用指令和参考资料 因为我在搜索互联网时没有找到太多信息 您可以使用任务计划程序托管包装 https
  • 递归遍历多维数组时对所有值调用 str_replace()

    我基本上想用str replace 多维数组的所有值 我似乎无法弄清楚如何对多维数组执行此操作 当值是一个数组时 我有点卡住了 它似乎处于一个永无休止的循环中 我是 PHP 新手 所以示例会很有帮助 function replace amp
  • 如何通过 URL 传递日期,以便我的 Action 在 MVC 中读取?

    如何通过 URL 传递日期 这就是我想要做的 正如您将看到的 日期使用了在 URL 中无效的正斜杠 http localhost Controller Action id 0d5375aa 6d43 42f1 91f0 ea73d9beb3
  • 为什么变量指针包含相同数据类型的地址?

    指针声明的一般语法 data type pointer name 指针是一个变量 其值是另一个变量的地址 即内存位置的直接地址 与任何变量或常量一样 您必须先声明一个指针 然后才能使用它来存储任何变量地址 指针的数据类型必须与指针所指向的变
  • 在nginx反向代理后面处理flask url_for

    我有一个使用 nginx 进行反向代理 ssl 终止的 Flask 应用程序 但是在 Flask 中使用 url for 和重定向时遇到了麻烦 nginx conf 条目 location flaskapp proxy pass http
  • 如果表单没有焦点,则不会调用 OnPaint

    我有一个带有自定义绘画的用户控件 据我所知 构造函数正确设置了样式 基本代码 public partial class LineChart2 UserControl public LineChart2 InitializeComponent
  • 更改 const 对象 - 没有警告?另外,什么情况下是UB?

    为什么下面的代码没有警告呢 int deserialize students const Student dest const int destCapacityMax FILE ptr file int i 0 ptr file fopen
  • 具有自定义模板的 STL 迭代器

    我有以下模板方法 template
  • 如何重定向到移动网站但保留主题标签?

    我希望拥有它 以便当用户加载我们的页面时 它会检查他们是否在移动设备上 然后将他们重定向到我们网站的移动版本 但保留原始哈希标签他们关注的链接 我尝试使用 javascript 中的哈希标签设置新位置 它在 Chrome 中工作 但在 Sa
  • 创建 ArrayList 元素的数组

    我想创建一个包含 ArrayList 元素的数组 我试过了 ArrayList
  • 创建一个仅指向另一个数组的一部分的数组?

    我有一个包含引用类型元素的巨大数组 并且我想创建许多其他数组 这些数组本质上只是指向该一个大数组的特定部分 换句话说 我想创建 索引器 或 具有长度的指针 在 C 中 使用指针很容易做到这一点 并为每个指针分配一个长度 例如创建一个包含具有
  • 在 iOS 上使用可调整大小的图像时避免混合图层

    我试图避免 iOS 上的混合层以提高性能 但是 我注意到我使用的可调整大小的图像backgroundView of my UITableViewCell被标记为混合层 事实上 使用任何可调整大小的图像 即使是没有透明度的 JPEG 都会导致
  • 如何使用 rspec 配置 Sorbet?

    我有一个简单的测试 但是describe关键字在冰糕测试中不起作用 我在这些方法上收到的错误 Method describe does not exist on T class of
  • 增大/缩小 WPF 动画

    在 WPF 中 当用户获得焦点时TextBox 我想要一些动画 可以使TextBox变成多行并使其Width更大 当他打字时 并且当焦点丢失时 TextBox恢复到原来的大小 尺寸未知 另外 最终 TextBox需要在 WPF 内DataG
  • Gunicorn 与 unix 套接字不工作给出 502 bad gateway

    我正在关注http www obeythetestinggoat com book chapter 08 html http www obeythetestinggoat com book chapter 08 html书上说要添加一个un
  • 如何更改 Notepad++ 更改文本行的背景颜色?

    更新 未保存 的文本行有亮粉色 ffc286 背景色 更改和保存的文本行有亮绿色 b5ffb5 此背景对于任何颜色样式都是相同的 我在样式配置器中找不到它 我以为它可能是增量突出显示 但事实并非如此 并且它不在全局设置中 我已经在寻找这个值
  • 授予子网中所有计算机的 mysql 访问权限

    我有一个在 Windows 上运行的 mysql 实例 和架构 我可以通过基于 localhost 作为服务器的连接字符串进行访问 现在我希望能够从同一子网上的另一台计算机访问该数据库 如果可能的话 我想使用单个用户 但允许它从同一子网上的
  • 在 n 层系统中,您应该从数据访问层向业务层返回哪些对象

    例如 如果您有一个名为 Person ID Name 等 的数据库表 数据访问层应将什么样的对象返回给业务层 我在想这样的事情 data access tier public class DataAccess public interfac