C# 统一的存储库模式
我对存储库模式非常陌生,因此想问问我当前的(简化的)模型是否正确,或者它是否需要额外的修改 背景: 我有一个通用的Windows平台应用程序,它有一个主窗口。这里我显示了C# 统一的存储库模式,c#,wpf,unity3d,win-universal-app,C#,Wpf,Unity3d,Win Universal App,我对存储库模式非常陌生,因此想问问我当前的(简化的)模型是否正确,或者它是否需要额外的修改 背景: 我有一个通用的Windows平台应用程序,它有一个主窗口。这里我显示了客户的简单列表(仅显示姓名、姓氏和出生日期) 然后我有一个按钮,用户可以在其中编辑所选客户的属性(这将导航到一个新的DetailPage.xaml) 设置: 以下是我设置存储库类和接口的方式: public interface ICustomerRepository { void AddCustomer(Customer
客户的简单列表(仅显示姓名、姓氏和出生日期)
然后我有一个按钮,用户可以在其中编辑所选客户的属性(这将导航到一个新的DetailPage.xaml)
设置:
以下是我设置存储库类和接口的方式:
public interface ICustomerRepository
{
void AddCustomer(Customer newCustomer);
void RemoveCustomer(Customer item);
List<Customer> GetCustomers();
void LoadCustomers(string sFilePath);
}
///Class Definition
public class CustomerRepository : ICustomerRepository
{
private List<Customer> _customers;
public void AddCustomer(Customer newCustomer)
{
if(newCustomer!=null)
{
if (!_customers.Contains(newCustomer))
_customers.Add(newCustomer);
}
}
public CustomerRepository()
{
LoadCustomers("defaultPath");
}
public void RemoveCustomer(Customer item)
{
if (item != null)
_customers.Remove(item);
}
public void LoadCustomers(string sPath)
{
//would load data from a file here
_customers = new List<Customer>()
{
new Customer() {ID = 1, Name ="Janko", Surname= "Hrasko", DateOfBirth = DateTime.Now },
new Customer() {ID = 2, Name ="Jozef", Surname= "Mrkvicka", DateOfBirth = DateTime.Now.AddDays(-10) },
new Customer() {ID = 1, Name ="Jozko", Surname= "Stefanovic", DateOfBirth = DateTime.Now.AddDays(-50) }
};
}
public List<Customer> GetCustomers()
{
if (_customers == null || _customers.Count == 0)
LoadCustomers("defaultPath");
return new List<Customer>(_customers);
}
}
在myMainWindowViewModel
中,我有一个集合(显示在页面上),如下所示:
public ObservableCollection<Customer> col_customers
{
get
{
return new ObservableCollection<Customer>(_customerRepository.GetCustomers());
}
}
public observebleCollection客户
{
得到
{
返回新的ObservableCollection(_customerRepository.GetCustomers());
}
}
问题:
这是在我的应用程序中实现存储库的正确方法吗?它适合您吗?你使用它有什么问题吗?试一下没有问题,一切正常。我问这个问题的原因是,我不确定我是否错过了任何关键的东西?很难回答你的问题。它将主要基于意见。因此,我建议您尝试这种实现,并注意实际问题。你会得到它们——问一个问题。你需要一些东西开始,这个代码比我看到的更好:)谢谢你的回答。您能告诉我,我可能会遇到什么问题吗?您可以从ContainerControlled LifetimeManager
获取内存泄漏。阅读有关终身管理器的更多信息(尝试使用HierarhicalLifetimeManager)。
public ObservableCollection<Customer> col_customers
{
get
{
return new ObservableCollection<Customer>(_customerRepository.GetCustomers());
}
}