我正在重构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>();
}
因此,在某些情况下,我不知道是将逻辑放在数据层中(然后只是从存储库层中回显函数),还是将其放在存储库层中(少了很多)工作,但效率可能较低,因为您获取的数据超过了所需的数量和过滤条件)。 (或者也许是业务层?)
我想向数据库添加多对多关系。 (例如,您登录一个“帐户”,每个“任务”对多个帐户可见。因此,现在我希望IENumerable GetTasks(Account a)给我所有任务“ a”都可以访问。我还希望SaveTask(Account a)在联结表中添加条目)。
我想要一个具有“ int Parent_Task_Id”属性的“ SubTasks”类,每当我保存一个子任务时,它都会更新其父任务的“ DateTime LastUpdated”属性。
我要“删除(任务t)”以删除所有子任务。