在哪里放置“类型”使用通用存储库时的特定功能

发布于 2024-12-12 18:54:02 字数 374 浏览 0 评论 0原文

我想知道使用通用存储库模式时放置特定于类型的函数的最佳位置是在哪里。

我的通用 Repository 具有 GetMany() 等方法,但是放置特定于类型的函数的最合理位置在哪里?

一个简单的例子是,假设我有一个“用户”类型,并且我想要一个函数,它不会返回用户的名字/姓氏并要求我在返回对象集时将它们粘合在一起,而是可以返回 名字 + " " + 姓氏 作为'用户名'。

我继承的以前的非存储库模式实现使用 EF 类型上的部分类来提供这些扩展方法,但我有点不确定在使用存储库时将这些类型的函数移动到哪里。

任何想法都会有很大的帮助,

干杯,

道格

I'm wondering where the best place to put Type specific functions is when using a generic repository pattern.

My generic Repository<T> has methods for things like GetMany() etc, but where is the most sensible location to place functions specific to a Type?

A simple example would be, say I have a 'User' type and I want a function, which instead of bringing back the firstname / lastname of the user and requiring me to glue them together when the object set is returned, could return FirstName + " " + LastName as 'Username'.

The previous non repository pattern implementation I've inherited used partial classes on the EF types to provide these extension methods, but I'm a little unsure where to move these type of functions to when using the respository.

Any ideas would be a big help,

Cheers,

Doug

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蓝颜夕 2024-12-19 18:54:02

下面的链接解释了如何指定选择,而不是扩大通用存储库的契约,常见的技术是对通用存储库进行子类化以实现特定的存储库

EF POCO

 public class CustomerRepository : GenericRepository<Customer>, ICustomerRepository
{
    public CustomerRepository(ObjectContext context) : base(context) { }

    public IList<Customer> NewlySubscribed()
    {
        var lastMonth = DateTime.Now.Date.AddMonths(-1);

        return GetQuery().Where(c => c.Inserted >= lastMonth)
        .ToList();
    }

    public Customer FindByName(string firstname, string lastname)
    {
        return GetQuery().Where(c => c.Firstname == firstname && c.Lastname == lastname).FirstOrDefault();
    }
}

您可以将您的函数添加为用于 NewlySubscribed() 的函数

The below link explains how to specify selection, instead of widening the contract of generic repository, the common technique is to subclass the generic repository to implement a specific repository

EF POCO

 public class CustomerRepository : GenericRepository<Customer>, ICustomerRepository
{
    public CustomerRepository(ObjectContext context) : base(context) { }

    public IList<Customer> NewlySubscribed()
    {
        var lastMonth = DateTime.Now.Date.AddMonths(-1);

        return GetQuery().Where(c => c.Inserted >= lastMonth)
        .ToList();
    }

    public Customer FindByName(string firstname, string lastname)
    {
        return GetQuery().Where(c => c.Firstname == firstname && c.Lastname == lastname).FirstOrDefault();
    }
}

you can add your function as the one used for NewlySubscribed()

爱情眠于流年 2024-12-19 18:54:02

我创建了类似的东西,但我所有类型特定的东西都在派生自 Repository 的子类中。通用的东西应该保持通用。类型特定的东西成为类型化的存储库。

I have created something similar, but all my type specific stuff is in sub classes that derive from Repository<T>. Generic stuff should remain generic. Type specific stuff becomes a typed repo.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文