储存库模式:我应将过滤逻辑放在哪一层?

时间:2018-11-29 07:49:07

标签: c# xamarin

我正在重构xamarin表单项目,并尝试实现存储库模式。我以TaskyPro项目为例:

https://github.com/xamarin/mobile-samples/tree/master/TaskyPro

让我感到困惑的是,我看到的每个关于存储库层实现的示例都只是在呼应数据层。

例如在TaskyPro中,数据层(TaskDatabase)如下所示:

public class TaskDatabase : SQLiteConnection
{
    static object locker = new object ();

    public TaskDatabase (string path) : base (path)
    {
        // create the tables
        CreateTable<Task> ();
    }

#region CRUD functions
    public IEnumerable<T> GetItems<T> () where T : BL.Contracts.IBusinessEntity, new ()
    {
        lock (locker) {
            return (from i in Table<T> () select i).ToList ();
        }
    }

    //OTHER functions here (Save, Delete, Update)
#endregion
}

然后所有存储库层(TaskRepository)都会调用以下函数:

    public static IEnumerable<Task> GetTasks ()
    {
        return me.db.GetItems<Task>();
    }

因此,在某些情况下,我不知道是将逻辑放在数据层中(然后只是从存储库层中回显函数),还是将其放在存储库层中(少了很多)工作,但效率可能较低,因为您获取的数据超过了所需的数量和过滤条件)。 (或者也许是业务层?)

  1. 我想向数据库添加多对多关系。 (例如,您登录一个“帐户”,每个“任务”对多个帐户可见。因此,现在我希望IENumerable GetTasks(Account a)给我所有任务“ a”都可以访问。我还希望SaveTask(Account a)在联结表中添加条目)。

  2. 我想要一个具有“ int Parent_Task_Id”属性的“ SubTasks”类,每当我保存一个子任务时,它都会更新其父任务的“ DateTime LastUpdated”属性。

  3. 我要“删除(任务t)”以删除所有子任务。

0 个答案:

没有答案
相关问题