出于性能原因,许多报告查询在ORM托管对象之外执行。
为了存储结果,我使用一个每查询类来保存数据库访问方法和服务之间的数据行。
例如在Java / Hibernate / Spring中:
@Repository
public interface DataRepository extends JpaRepository<DataDAO, Long> {
@Query("select new com.evil.db.XXX(...) from #{#entityName} where ...")
List<XXX> findXXX(...);
XXX
的名称是什么?是DTO还是DAO还是Business object?如何在模式书籍和框架参考手册中命名中间存储类?它是一个POJO,但这个词太通用了......
我通常将这些类作为内部静态类保存,并且没有任何问题可以给出适合于包含数据的名称。
但我喜欢为类名添加后缀,如果它是顶级类来表示它的角色,就像传统上它是为DAO
/ Service
/ Controller
/等...
答案 0 :(得分:0)
假设您正在使用存储库模式,您不应该遇到此命名问题。存储库模式通常由名为 IRepository 的接口定向 - 或者也可以是抽象类 - 表示数据库上的泛型操作,如下所示(C#代码):
public interface IRepository<T>
{
T GetById(int id);
IEnumerable<T> List(Expression<Func<T, bool>> predicate);
void Add(T entity);
void Delete(T entity);
void Update(T entity);
}
在您的情况下,由于您需要一些自定义查询,您应该为特定情况创建一个界面。以下示例引用了产品域( IProductRepository )的特定存储库,该存储库强制实现 IRepository 。
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
}
public interface IProductRepository : IRepository<Product>
{
Product GetProductBySomething(string somemething);
IEnumerable<Product> GetAvailableProducts();
}
最后,您将创建一个实现 IRepositoryProduct 的具体类。
public class ProductRepository : IProductRepository
{
public void Add(Product entity)
{
// ...
}
public void Delete(Product entity)
{
// ...
}
public IEnumerable<Product> Get(Expression<Func<Product, bool>> predicate)
{
// ...
}
public Product Get(int id)
{
// ...
}
public IEnumerable<Product> GetAvailableProducts()
{
// ...
}
public Product GetProductBySomething(string somemething)
{
// ...
}
public void Update(Product entity)
{
// ...
}
}
public Product Get(int id)
{
// ...
}
public void Update(Product entity)
{
// ...
}
}
使用这种方法,您的方法不应该有命名问题,因为它们将遵循接口约定。