你会如何重构这段代码?

Al *_*l C 0 delphi oop refactoring design-patterns

这个假设的例子说明了我似乎无法通过的几个问题,即使我一直在努力!...假设原始代码是一个长事件处理程序,在UI中编码,当用户单击网格中的单元格时触发.表示为伪代码:

if Condition1=true then
begin
  //loop through every cell in row, 
  //if aCell/headerCellValue>1 then
  //color aCell red
end
else if Condition2=true then
begin
  //do some other calculation adding cell and headerCell values, and
  //if some other product>2 then
  //color the whole row green
end
else show an error message
Run Code Online (Sandbox Code Playgroud)

我看着这个并说"啊,重构策略模式!代码将更容易理解,更容易调试,以后更容易扩展!" 我明白了.

我可以轻松地将代码分解为多个程序.

问题最终与范围有关.假设伪代码广泛使用网格属性,单元格中显示的值,甚至可能是内置网格方法.如何在不引用UI中的网格组件的情况下将所有这些移动到另一个单元 - 这会破坏松散耦合的所有"规则",使OOP有价值?...

我真的很期待回应.谢谢,一如既往 - Al C.

Rob*_*edy 8

重构将代码放入单独的例程并不一定意味着将所有内容分离.您也可以将每个案例重构为与您正在重构的事件处理程序属于同一个类的新方法.这些方法将具有与当前代码已有的网格组件相同的访问权限.

你写的代码事件做的事情对电网形式.您是否真的预见到需要针对其他事件进行这些操作?或者在其他形式的其他网格上执行它们?如果没有,那么将所有东西分离只是一个学术练习,对您的产品没有任何意义.编写特定于应用程序的代码是可以的.

如果要分离,那么执行此操作的方法是将参数添加到分解的例程中.如果例程需要使用网格而不确切知道它是哪个网格,那么将网格作为参数传递:

if Condition1 then
  ColorCellsRedAboveRatio(Grid, 1.0)
else if Condition2 then
  ColorRowsGreenAboveProduct(Grid, 2)
else
  Error;
Run Code Online (Sandbox Code Playgroud)