将C#3层体系结构插入到数据库中,同时考虑依赖项注入
假设我有一个交易表单,我可以在其中选择一个特定的客户和该客户的订单详细信息 因此,我将: Customer.cs将C#3层体系结构插入到数据库中,同时考虑依赖项注入,c#,.net,design-patterns,dependency-injection,C#,.net,Design Patterns,Dependency Injection,假设我有一个交易表单,我可以在其中选择一个特定的客户和该客户的订单详细信息 因此,我将: Customer.cs public class Customer { public string Id { get; set} public string Name { get; set} } public class Goods { public string Id { get; set} public string Description { get; set}
public class Customer
{
public string Id { get; set}
public string Name { get; set}
}
public class Goods
{
public string Id { get; set}
public string Description { get; set}
public string Price { get; set}
}
public class Order
{
private List<Goods> _orderedGoods = new List<Goods>();
public string Id { get; set}
public Customer Customer { get; set}
public List<Goods> OrderedGoods { get; }
public void AddGoods(Goods goods)
{
_orderedGoods.Add(goods);
}
}
Goods.cs
public class Customer
{
public string Id { get; set}
public string Name { get; set}
}
public class Goods
{
public string Id { get; set}
public string Description { get; set}
public string Price { get; set}
}
public class Order
{
private List<Goods> _orderedGoods = new List<Goods>();
public string Id { get; set}
public Customer Customer { get; set}
public List<Goods> OrderedGoods { get; }
public void AddGoods(Goods goods)
{
_orderedGoods.Add(goods);
}
}
订单.cs
public class Customer
{
public string Id { get; set}
public string Name { get; set}
}
public class Goods
{
public string Id { get; set}
public string Description { get; set}
public string Price { get; set}
}
public class Order
{
private List<Goods> _orderedGoods = new List<Goods>();
public string Id { get; set}
public Customer Customer { get; set}
public List<Goods> OrderedGoods { get; }
public void AddGoods(Goods goods)
{
_orderedGoods.Add(goods);
}
}
公共类秩序
{
私有列表_orderedGoods=新列表();
公共字符串Id{get;set}
公共客户客户{get;set}
公共列表OrderedGoods{get;}
公共物品(货物)
{
_订单货物。添加(货物);
}
}
然后在表示层,我有一个gridview,它只包含商品id字符串
我的问题是:
谢谢大家! 这很主观,但对我来说: 让Order类创建自己的细节可以吗?还是应该 还有财产注入吗 你说的创造自己的细节是什么意思?一个新的细节对象应该有一个输入(从UI)或者应该从存储库(存储库)中检索。这样,我更喜欢保留要注入的细节,而不是在Order类中创建;并在UI或存储库中创建,或在负责创建的业务类中创建 当我想保存我的订单时,应该是演示层还是 填充订单详细信息的业务层 这取决于订单明细对象的创建是否有特定的规则。如果没有,那么我更喜欢创建带有细节的Order类,并让业务层进行验证。如果它需要特定的逻辑(例如将值a设置为属性a,将值1设置为属性B),请将其保留在业务逻辑中,或者为其创建构建器模式 如果业务层只发送一个完整的对象供存储库保存, 那么业务层应该能够创建一个新的订单对象吗?或者是 有没有另一种方法可以在考虑DI的情况下管理瞬态对象创建 这和我上面的回答是一样的。依赖注入的主要目的是以这样一种模块化的方式保持逻辑,以便它能够被重用和标准化。如果您认为在对象创建(细节)中需要一个特定的可重用逻辑,那么您需要为它创建一个服务对象。否则,最好将创建留在其他层(UI)中 其他需要注意的事项: 确实要使用
列表
作为详细数据类型吗?它将细节对象的实现限制为仅列表
。如果有时逻辑想要使用数组
,则需要对对象进行另一个配置。我更喜欢使用IEnumerable
,如果需要在运行时插入,则可以私下使用List
编辑:
用户似乎想知道如何处理对象创建。我将从最简单到最安全地解释它
最简单-->UI级别,假设使用C#winform:
最安全的(IMHO):
所以基本上我应该使用
private IEnumerable\u orderedGoods代码>并通过属性注入设置其值?你能给我指个地方吗?我仍然不知道如何在gridview中将用户的输入转换成passable对象,而不使用new object()
东西来实例化它。我的意思是使用private List\u orderedGoods代码>并具有公共IEnumerable OrderedGoods
。然后创建一个空心以插入详图。当你想使你的对象不可变时,有时这会很有用。您使用的是什么用户界面?通常我只是接受本地数据类型(字符串等)的输入,然后做一些基本的验证并创建对象。是的,这正是我想知道的。如何从本机创建对象?您是否将本机从表示层传递到业务层进行基本验证,然后让业务层生成对象?