【问题标题】:Avoid repetitive coding to transfer local variable to an object field避免重复编码以将局部变量传输到对象字段
【发布时间】:2017-04-15 01:36:40
【问题描述】:

我有一个从多个数据库读取数据的 DBReader 类。我有一个 DBDataCache 类,用于缓存特定数据库的数据,并且有成员变量,如ArrayList arlCostCentres, DataTable dtPriceLists 等。

DBReader有ReadListOfCostCentres, ReadPriceLists等方法,以数据库名为参数,从数据库中读取数据返回给调用者。此外,它应该将结果缓存到 DBDataCache 类中。

问题出在 DBReader 的每个方法中,我需要为缓存编写相同的代码行,唯一的区别是我有数据的局部变量名称,以及存放数据的 DBDataCache 类的字段名称我想存储局部变量。

示例:在 ReadListOfCostCentres 中:

dbData = (DBDataCache) mapDbDataCache[dbName.ToUpper()];
if (dbData == null)
{
    dbData = new DBDataCache();
}
dbData.arlCostCentres = arlCostCentres;

在 ReadPriceLists 中:

dbData = (DBDataCache) mapDbDataCache[dbName.ToUpper()];
if (dbData == null)
{
    dbData = new DBDataCache();
}
dbData.dtPriceLists = dtPriceLists;

有没有办法避免这种重复编码并使其更通用,或者至少将 4 行代码减少到一行,而不会降低性能?

在 DBDataCache 中,我希望每个重要表都有单独的字段。我不希望使用 key = data name(如“Cost Centers”、“Pricelists”)和 value = ArrayList 或 DataTable 作为值来实现通用 SortedList。

我希望将重复的代码移动到单独的函数CacheData,但是在 DBDataCache 中设置字段的代码每次都需要唯一的字段名称。

有解决办法吗?

谢谢。

【问题讨论】:

  • 你为什么使用匈牙利符号?
  • 另外,这是 Entity Framework 和/或 Automapper 会处理的事情 - 您是否有理由不使用 ORM?
  • 我不想学习 ORM 或实体框架。我目前使用 .NET 2.0,但不介意迁移到 .NET 4.5。
  • 我连接的数据库是一个专有的遗留数据库;不符合 SQL 的数据库
  • 使用 T4、CodeSmith 等代码生成器……来保持对重复代码的完全控制。

标签: c# reflection generic-programming non-repetitive


【解决方案1】:
dbData = (DBDataCache) mapDbDataCache[dbName.ToUpper()];
dbData = dbData ?? new DBDataCache();
dbData.arlCostCentres = arlCostCentres;

我希望将重复的代码移到单独的函数CacheData,但是在DBDataCache中设置字段的代码每次都需要一个唯一的字段名。

也许我不完全理解,但将参数传递给这个单独的函数似乎很简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多