【发布时间】:2012-11-27 00:45:59
【问题描述】:
我正在构建通用共享点 DALL,所以我需要帮助。 我不知道这是否适用,但从逻辑上讲它必须是。
我的问题是我的 gr8 TTL 不确定他需要使用什么数据源:S(SQL 或 SharePoint 列表),他需要开始项目的开发。
所以我需要构建 DAL,因为 SP 列表是我的数据源,因此未来的变化将降至最低。
现在我拥有的是 baseDAL,它包括所有常见的操作,如删除、getAll、等
myBase dal 类现在类似于
public class BaseDAL<T> where T : BaseInfo,new()
{
public virtual List<T> GetAllItem()
{
//code to read from any data source and return data
}
public virtual Boolean Delete(T entity)
{
int entityID = ((BaseInfo)entity).ID;
deleteEntity(entityID);
}
}
我将 baseInfo 类作为主要业务对象实体。
假设我有两个业务实体(员工、学生)和两个 DAL,一个用于员工,一个用于学生
所以我在想的是在 getAllItem 中实现代码,它根据 T 类型返回所有项目,所以代码在 baseDAL 中可能如下所示
public virtual List<T> GetAllItem()
{
SPListItemCollection items = //code to read from list please note that list name saved in baseInfo object
T.getBusinessListItems(items); //toList
}
在 EmployeeDAL 中,我在 SPListItemCollection 和业务实体之间实现了一个映射器函数,代码将与此类似
public virtual List<Employee> getBusinessListItems(SPListItemCollection items)
{
//loop the items and fill them in list of employee objects
return list<Employee>
}
希望这能澄清情况,我不知道这是否是写作方式,我不是一个技术人员。如果有其他方法可以做到这一点,请帮忙。
【问题讨论】:
-
我无法理解你的问题..你想做什么......
-
我为 C# 添加了一个标签,因为我假设这是在 C# 中。如果不是这样,请更改它。
-
特别是
T.toList部分!你想在这里做什么... -
这里的问题很不清楚;此外,除非底层数据源also 支持泛型(例如,LINQ-to-SQL 有
GetTable<T>),否则这可能不是泛型的好用处。但是对于我能想到的大多数示例:实现不会是“通用的”,因此 generics 可能不是正确的技术选择。最后,这里的消费者很少是通用的。 -
如果你说你应该有一个静态方法,比如
Student.toList()、Employee.toList(),那么再说一遍:我可能会说这不是一个很好的设计方法以开头。泛型没有内置的隐喻来执行静态鸭子类型的方法。你可以通过反射来做到这一点,但是:yeuch.
标签: c# generics data-access-layer