这些类似的方法可以重构为单一方法吗?

时间:2018-01-31 18:40:34

标签: vb.net dry

我的编码技巧介于新手和专家之间。和大家一样,我总是试图学习更简单有效的编码。 DRY(不要重复自己)原则正在推动这个问题。我读过很多SO帖子,真的无法收集到引起共鸣的答案。

该应用程序有3层:UI,域,存储。存储层有一个类,用作将程序数据保存到SQL Server的服务。有多个类有些相似但不完全相似。这些类级联如下:

Class Parent
  :
  Public Property Children as New List(Of ParentChild)
End Class

Class ParentChild
  :
  Public Property Children as New List(Of ParentGrandChild)
End Class

Class ParentGrandChild
  :
End Class

这些类的CRUD方法看起来很相似,这让我想知道它们是否符合DRY原则的标准。以下是3个类的Update方法(实际上总共有5个类使用这种类型的方法):

Public Overrides Sub ParentUpdate(Parent As Parent)
  Dim thisSqlParent = SqlContext.SqlParents.Find(Parent.ID)
  thisSqlParent.DomainToSqlParent(Parent)
  SqlContext.SaveChanges()
End Sub

Public Overrides Sub ChildUpdate(ParentChild As ParentChild)
  Dim thisSqlChild = SqlContext.SqlChildren.Find(ParentChild.ID)
  thisSqlChild.DomainToSqlChild(ParentChild)
  SqlContext.SaveChanges()
End Sub

Public Overrides Sub GrandchildUpdate(Grandchild As ParentGrandchild)
  Dim thisSqlGrandchild = SqlContext.SqlActivities.Find(Grandchild.ID)
  thisSqlGrandchild.DomainToSqlGrandchild(Grandchild)
  SqlContext.SaveChanges()
End Sub

鉴于有4种CRUD方法,我有5个类,这是很多非常相似的代码。

这里有几个隐含的问题。

1)甚至可以重构这些有些类似的方法?在我的编码技能水平上,我不明白它是如何完成的,因为上面每种方法中的代码都是用不同的类进行不同的调用;但是我不是一个专家编码器,这就是我要问的原因。

2)鉴于这些方法太短,重构是否有意义?从其他SO帖子中可以清楚地看出,有时重构是没有意义的,因为重复代码如此简单时需要权衡。

3)但即使它没有意义,如果有可能重构这样的代码,那会怎么做?如果我需要继续学习,请指出正确的方向。

虽然这是vb.net,但语言似乎足够相似,建议的C#标签才有意义。我也想知道这篇文章是否适合SO,因为它更通用,或者我应该将它发布在codereview.stackexchange上。

1 个答案:

答案 0 :(得分:0)

使用公共代码创建基类(例如Person)。然后,您的每个其他类都会实现此功能。注意到VB不进行多重继承。