为我的对象实现 Save 方法

2024-02-06

我正在尝试改进应用程序的设计,因此不是从表示层调用数据访问层。我将尝试从 BusinessObjects 层中的对象实现保存方法。但我不确定如何通过图层传递对象或其属性。例如,在我的旧设计中,我只是在表示层中创建对象的实例并分配它的属性,然后调用 DataAccess 方法将此信息保存在数据库中并将对象作为参数传递,如图所示。

DAL

public static void SaveObject(Object obj)
{
   int id = obj.id;
   string label = obj.label;
}

PL

Object obj = new Object();
obj.id = 1;
obj.label = "test";
DAL.SaveObject(obj); 

但我只想在我的PL

Object obj = new Object();
obj.id = 1;
obj.label = "test";
obj.SaveObject();

那可能吗?我的 DAL 会是什么样子?

Edit: 解释我的要求

我现在将把我的代码基于系统中一个非常重要的对象。

业务实体层使用业务逻辑层

namespace BO.Cruises
{
    public class Cruise
    {
        public int ID
        { get; set; }

        public string Name
        { get; set; }

        public int BrandID
        { get; set; }

        public int ClassID
        { get; set; }

        public int CountryID
        { get; set; }

        public string ProfilePic
        { get; set; }

        public bool Hide
        { get; set; }

        public string Description
        { get; set; }

        public int OfficialRate
        { get; set; }

        public string DeckPlanPic
        { get; set; }

        public string CabinsLayoutPic
        { get; set; }

        public List<Itinerary> Itineraries
        { get; set; }

        public List<StatisticFact> Statistics
        { get; set; }

        public List<CabinRoomType> RoomTypesQuantities
        { get; set; }

        public List<CabinFeature> CabinFeatures
        { get; set; }

        public List<CruiseAmenity> Amenities
        { get; set; }

        public List<CruiseService> Services
        { get; set; }

        public List<CruiseEntertainment> Entertainment
        { get; set; }

        public List<CustomerReview> CustomerReviews
        { get; set; }
    }

}

业务逻辑层使用数据访问层

实际上,这一层的目的是验证我的对象,然后调用 DAL 方法,但我现在没有实现任何验证,所以我只是用它来调用 DAL 方法。

    public static void Save(object cruise)
    {
        CruisesDAL.Save(cruise);
    }

数据访问层尝试引用 BussinessEntities 但它给了我循环依赖错误!

它应该接收该对象并将其转换为 Cruise 实体

    public static void Save(object cruise)
    {
         Cruise c = cruise as Cruise;

         //access the object c properties and save them to the database
    }

我的项目中的代码示例:

public static List<Cruise> GetCruisesList()
{
    string commandText = "SELECT ID, Name + CASE Hide WHEN 1 Then ' (Hidden)' ELSE '' END AS Name FROM Cruises";
    List<Cruise> cruises = new List<Cruise>();
    Cruise cruise;

    using (SqlConnection connection = new SqlConnection(ConnectionString))
    {
        using (SqlCommand command = new SqlCommand(commandText, connection))
        {
            connection.Open();

            using (SqlDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    cruise = new Cruise();

                    cruise.ID = Convert.ToInt32(reader["ID"]);
                    cruise.Name = reader["Name"].ToString();

                    cruises.Add(cruise);
                }
            }
        }
    }

    return cruises;
}

表示层使用业务实体

输入控件(文本框、DropDownList 等)

单击保存按钮时,我会获取所有值,创建一个 Cruise 对象并调用 Cruise.Save();


您应该避免将域模型与持久性逻辑混合。 上面给出的例子将构成一个紧密耦合的解决方案。 为了实现 .SaveObject(),您可以在 BL 中创建扩展方法来完成这项工作。

BL.*

public static class ObjectPersistanceExtensions{

       public static SaveObejct<T>(this IBaseEntity obj){

            IObjectDal<T> _dal = AvailableSerices.Obtain<IObjectDal<T>>();
            _dal.AddObject(obj);
            _dal.Commit();
       }
}

因此,通过这种方式,您仍然可以向域对象添加职能人员,而无需耦合域对象中的逻辑。

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

为我的对象实现 Save 方法 的相关文章

随机推荐

  • 清除帐户删除数据

    我想当用户手动从应用程序中删除帐户时清除应用程序的数据Accounts sync设置应用程序中的部分 我有自己的实现AbstractAccountAuthenticator但没有方法可以挂钩删除帐户过程 有什么提示吗 我一直在思考同样的问题
  • Magento 更改 div 的下拉可配置产品选项

    我需要将可配置产品的选项显示为内部带有 a 的 div 让用户在选项中单击并选择它 而不是下拉列表 就像菜单 目标是显示鞋子尺码 正如许多人所知 Magento 使用 Json 响应来填充下拉菜单的选项 var spConfig new P
  • NSDecimalNumber DecimalNumberWithString:忽略当前区域设置

    根据文档 NSDecimalNumber decimalNumberWithString 应该使用区域小数分隔符 NSDecimalSeparator 是否是句点 例如所使用的 在美国 或逗号 例如在法国使用的 取决于默认区域设置 但是当我
  • 无法启动监控且无法运行程序。为什么?

    我上周重新安装了Windows 7并解压了Eclipse并再次重新安装了SDK 但我没有在Eclipse中运行该程序 当我将 Galaxy 手机连接到计算机时 Eclipse 显示错误并频繁在控制台选项卡中写入Failed to start
  • 具有溢出的元素:受浮动元素影响的自动

    有人可以向我解释一下为什么溢出有以下效果吗 在下面的 jsfiddle 中 我有一个浮动到左侧的 Div 并设置了宽度和高度 接下来我有一个内容 div 您可以将其视为左侧导航和网站布局的内容 在内容中 我有两个相同的 Div 除了一个具有
  • PyInstaller 新手:你好世界

    我正在尝试使用 PyInstaller v2 1 从简单的 hello world 脚本 Python 2 7 创建单个可执行文件 脚本 hello py 只有一行 print Hello World 然后 我在包含脚本的文件夹中打开一个命
  • Python 检查函数是否有 return 语句

    E g def f1 return 1 def f2 return None def f3 print Hello 功能f1 and f2 返回一些东西但是f3 not a f2 b f3 和这里a equals b所以我不能只比较函数的结
  • 序列化程序调用显示类型错误:“ListSerializer”类型的对象不可 JSON 序列化?

    我试图在 django GET 请求中调用序列化器 但它显示了一个 类型错误 ListSerializer 类型的对象不可 JSON 序列化 如果我在某个地方出错了 请帮助我 提前致谢 class Member MemberMixin AP
  • 开发工具“网络”选项卡,在“源”选项卡中打开脚本吗?

    在 Chrome 开发工具中 查看 网络 选项卡时 是否可以选择一个脚本并在 源 选项卡中打开它 双击该脚本将在新的浏览器选项卡中将其打开 由于 源 选项卡按源域 以及文件夹路径 组织所有资源 因此如果您不能立即知道特定脚本的来源 则查找该
  • Android Studio 3.1:找不到 gradle-core.jar (gradle-core-3.1.0.jar)

    我刚刚在以前版本的 android 上安装了 Android Studio 3 1 当我尝试创建新项目时 在项目构建过程中它会停止并提示如下 错误 我使用了很多解决方案 但没有帮助 这是错误消息 错误 找不到 gradle core jar
  • AngularJS TypeError:在 Object.stringify(本机)处将循环结构转换为 JSON

    我正在尝试让这段代码正常工作 显然 代码中有循环引用 但我找不到它 有人可以帮我吗 var appjson APP DATA RETRIEVED fail var appPostRequest get appurl data appconf
  • 使用 Regex C# 删除 HTML 标签的样式

    我想使用 C 从 HTML 标签中删除样式 它应该只返回 HTML 简单标签 对于即 如果String p style margin 15px 0px padding 0px border 0px Hello p 然后它应该返回String
  • 不包含带有 0 个参数的构造函数

    我收到一条错误消息 指出以下代码中的 Products 不包含采用 0 个参数的构造函数 public class Products string id string name double price int soldCount int
  • 使用复选框从数据库表中删除行

    我想在表中显示数据库中的记录 每行都有复选框 该复选框将确定用户是否要删除该特定行 如果选中 我能够显示数据库中的数据 但是当我按下删除按钮时什么也没有发生 我不确定 但我认为错误在于我删除了部分代码 但我可能是错的 我不知道 无论如何 这
  • 使用自定义 Gson 反序列化器反序列化 JSON 响应时出错

    在我使用 Retrofit 的 Android 应用程序中 我尝试反序列化具有包装项目列表的外部对象的 JSON 我使用 GsonConverterFactory 和 Retrofit 实例来反序列化 JSON 我创建了一个自定义反序列化器
  • 是否可以获取Mysql中按列名分组在一起的行列表?

    在我的数据库中 我有一个名为 结果 的表 其中有四列 名称 设备 通过 失败 假设表中有 4 行 如下所示 name device passed failed test1 device 1 2 1 test1 device 2 3 0 te
  • 如何在 iPhone 的 pdf 页面中使用 CGPDFScanner 查找字坐标?

    我正在使用 CGPDFScanner 解析 pdf 页面 但我无法找到搜索结果的坐标 在 void Tm1 CGPDFScannerRef Scanner void info 中 我只获取某些单词的坐标 而不是 pdf 中每个单词的坐标 如
  • tensorflow有没有类似pytorch的“masked_fill_”的功能

    我想通过掩码矩阵将 INF 值设置为矩阵 就像 pytorch 代码一样 scores data masked fill y mask data float inf 我尝试使用tf map fn实现这一点 但性能太慢 那么tensorflo
  • undertow-handlers.conf 中的规则将 HTTP 重定向到 HTTPS

    我在负载均衡器后面有一个 Wildfly 它们之间的连接始终是 HTTP 客户端和负载均衡器之间的连接可以是 HTTP 或 HTTPS 负载均衡器设置一个标头 X Forwarded Proto 来让 Wildfly 知道客户端正在使用哪个
  • 为我的对象实现 Save 方法

    我正在尝试改进应用程序的设计 因此不是从表示层调用数据访问层 我将尝试从 BusinessObjects 层中的对象实现保存方法 但我不确定如何通过图层传递对象或其属性 例如 在我的旧设计中 我只是在表示层中创建对象的实例并分配它的属性 然