这可能是一个有点奇怪的问题,我现在所拥有的东西可以工作,但我觉得有点奇怪,我想知道这是因为设计/架构糟糕。这里的任何想法将不胜感激。
最初的设计是在我从别人那里继承的代码库中。我们有一个 linq-to-sql 类(在 dbml 的设计器文件中自动生成)。
[global::System.Data.Linq.Mapping.TableAttribute(Name="dbo.ARCustomers")]
public partial class ARCustomer : INotifyPropertyChanging, INotifyPropertyChanged
{
// variables
// extensibility method defs
// ctor
// properties
// etc.
}
然后是另一个名为ArCustomer
(注意小写“r”)的类类,它是自动生成类的扩展版本。当我说扩展时,我的意思是它具有 LINQ 类的所有属性,再加上一些需要一些逻辑来填充的属性。
代码中有很多地方我们想要将 anARCustomer
转换为ArCustomer
. 所以我在课堂上写了一个扩展方法(这感觉很奇怪)ArCustomer
。
public static ArCustomer FromDatacontextObject(this ArCustomer customer, ARCustomer datacontextObject)
{
var arCustomer = new ArCustomer();
arCustomer.Id = datacontextObject.ProjectID;
// more of the same
// now populate the other fields that don't exist on the datacontextObject
return arCustomer;
}
它是这样称呼的。
var customerfromDb = accountReceivableRepository.GetCurCustomer(arId);
ArCustomer customer = new ArCustomer();
customer = customer.FromDatacontextObject(customerfromDb);
这对我来说感觉不对,但我不知道有什么更好的选择。(包含扩展属性的部分类会起作用吗?将它们填充到它的构造函数中?)或者它很好......我对一些东西感兴趣......
- 我觉得这是错误的/奇怪的/不好的吗?
- 具体来说,我实施的解决方案有哪些缺点?我觉得一个是我经常挠头,试图区分这两个类并弄清楚哪个是哪个。
- 他们有什么优点吗?
- 任何更好的解决方案(以及为什么它们更好)?
(不相关——我希望这种问题对于堆栈溢出来说是可以的。我几乎觉得我在要求一个迷你代码审查,这可能是主观的;另一方面,我试图问一些具体的问题,觉得我必须不是唯一遇到这种情况的开发人员(“我有一个对象,需要把它变成另一个对象”),所以希望让线程保持打开状态会有所收获)。
多谢你们!