在DAL层有个基类,代码如下
T Create();
T Update(T entity);
T Insert(T entity);
void Delete(T entity);
T Find(params object[] keyValues);
List<T> FindAll();
IQueryable<T> Query(Expression<Func<T, bool>> filter);
IList<T> QueryByPage<TKey>(int PageSize, int PageIndex, Expression<Func<T, bool>> filter, Expression<Func<T, TKey>> orderby, bool iscount, out int recordsCount);现在我在实现BLL层的时候,按下面的方法写的,但是DAL有基类,BLL层怎么实现这个基类,不用每个类都写上一些类似的代码namespace BLL
{
public class Category_tbl_BLL
{
IRepository<Category_tbl> repository;
public Category_tbl_BLL()
{
this.repository = new Category_tbl_DAL();
}
public Category_tbl Create()
{
return repository.Create();
}
public Category_tbl Insert(Category_tbl entity)
{
return repository.Insert(entity);
}
public Category_tbl Update(Category_tbl entity)
{
return repository.Update(entity);
}
public void Delete(Category_tbl entity)
{
repository.Delete(entity);
}
}
}
T Create();
T Update(T entity);
T Insert(T entity);
void Delete(T entity);
T Find(params object[] keyValues);
List<T> FindAll();
IQueryable<T> Query(Expression<Func<T, bool>> filter);
IList<T> QueryByPage<TKey>(int PageSize, int PageIndex, Expression<Func<T, bool>> filter, Expression<Func<T, TKey>> orderby, bool iscount, out int recordsCount);现在我在实现BLL层的时候,按下面的方法写的,但是DAL有基类,BLL层怎么实现这个基类,不用每个类都写上一些类似的代码namespace BLL
{
public class Category_tbl_BLL
{
IRepository<Category_tbl> repository;
public Category_tbl_BLL()
{
this.repository = new Category_tbl_DAL();
}
public Category_tbl Create()
{
return repository.Create();
}
public Category_tbl Insert(Category_tbl entity)
{
return repository.Insert(entity);
}
public Category_tbl Update(Category_tbl entity)
{
return repository.Update(entity);
}
public void Delete(Category_tbl entity)
{
repository.Delete(entity);
}
}
}
解决方案 »
- 进来有分(关于开机自动启动程序)的问题,请耐心的看完,谢谢!
- 通过System.Net.NetworkInformation获得的网络信息不准确
- GDI+发生一般性错误
- c#怎么获取进程实例?
- 问一个关于截取字符的问题,急!!!
- 请教!
- 制作不规则按钮
- 部分电脑连接数据库失败,提示:未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远
- C#如何用程序实现将Store procedure(存储过程)直接写入SQL数据库,散分了~~~~~~~
- 求VS2003简体中文正式版下载,可用立马给分
- 使用BinaryWriter写文件第一个字符是乱码是什么原因?
- C# list 提示未对out参数进行赋值
public interface IRepository<T>
{
T Create();
T Update(T entity);
T Insert(T entity);
void Delete(T entity);
T Find(params object[] keyValues);
List<T> FindAll();
IQueryable<T> Query(Expression<Func<T, bool>> filter);
IList<T> QueryByPage<TKey>(
int PageSize,
int PageIndex,
Expression<Func<T, bool>> filter,
Expression<Func<T, TKey>> orderby,
bool iscount,
out int recordsCount);
}public class CategoryRepository : IRepository<Category_tbl>
{
// TODO: implement the methods defined in IRepositoryBase
}namespace BLL
{
public class Category_tbl_BLL
{
IRepository<Category_tbl> repository;
public Category_tbl_BLL()
{
this.repository = new CategoryRepository();
}
public Category_tbl Create()
{
return repository.Create();
}
public Category_tbl Insert(Category_tbl entity)
{
return repository.Insert(entity);
}
public Category_tbl Update(Category_tbl entity)
{
return repository.Update(entity);
}
public void Delete(Category_tbl entity)
{
repository.Delete(entity);
}
}
}public class Category_tbl
{ }
如果你想共享代码,可以创建一个RepositoryBase class,这个类应该实现所有共享的代码,然后按照下面的代码改写CategoryRepository,这样就不必重新写共享的代码。
public interface IRepository<T>
{
T Create();
T Update(T entity);
T Insert(T entity);
void Delete(T entity);
T Find(params object[] keyValues);
List<T> FindAll();
IQueryable<T> Query(Expression<Func<T, bool>> filter);
IList<T> QueryByPage<TKey>(
int PageSize,
int PageIndex,
Expression<Func<T, bool>> filter,
Expression<Func<T, TKey>> orderby,
bool iscount,
out int recordsCount);
}public class RepositoryBase
{
// TODO: implement the shared methods defined in IRepositoryBase
}public class CategoryRepository : RepositoryBase, IRepository<Category_tbl>
{
// TODO: the method which is not implemented by RepositoryBase
}
{
T Create();
T Update(T entity);
T Insert(T entity);
void Delete(T entity);
T Find(params object[] keyValues);
List<T> FindAll();
IQueryable<T> Query(Expression<Func<T, bool>> filter);
IList<T> QueryByPage<TKey>(
int PageSize,
int PageIndex,
Expression<Func<T, bool>> filter,
Expression<Func<T, TKey>> orderby,
bool iscount,
out int recordsCount);
}public class RepositoryBase
{
// TODO: implement the shared methods defined in IRepository
}public class CategoryRepository : RepositoryBase, IRepository<Category_tbl>
{
// TODO: the method which is not implemented by IRepository
}
不要设置什么“基类”,甚至连接口也不要硬性规定。DAL要有“柔性”,任何T的实现实例都可以使用DAL。假设你在实体中去设计什么“增删改查”,那么就完全背离了分层概念了。因为实体甚至也要带到表现层,那么实体具有“增删改查”那么你各层都有“增删改查”了。你的“基类”根本就是错误的。
2. Applying Domain-Driven Design and Patterns: With Examples in C# and .NET, 1/e By Jimmy Nilsson