0

什么是好的 OOP 方式?

现在,每个对象都包含对其容器的引用以及其键或索引的副本,以在该容器中标识自己。DeleteMe() 方法调用容器的 Delete(key) 方法。我认为这很糟糕,因为紧密耦合、循环引用和键/索引的重复副本。

我想这样做的原因是因为每个对象都在 UI 中表示,并且有一个由自身生成的上下文菜单,其中包含“删除”和“重命名”等选项。

我听说可以在这里使用代表或事件,但我并不真正了解它们背​​后的动机,以及它们是否只是对我来说的 YAGNI。

4

1 回答 1

2

理想情况下,删除、重命名操作不应该属于对象,这些应该只属于容器。

我想这样做的原因是因为每个对象都在 UI 中表示,并且有一个由自身生成的上下文菜单,带有“删除”和“重命名”等选项

容器上的静态操作应该像这样调用

  container.Delete(Object)
  container.Rename(Object, String newName)

通过在对象本身上创建 DeleteMe,Rename,您正在创建依赖于容器的对象,然后它不能用于存储在 List、Dictionary 等其他容器中(否则 DeleteMe 将失败)

现在对于 Delete Handler 应该从容器中删除对象的要求,您可以使用command pattern。例如

DeleteCommand command = new DeleteCommand(); // Create new Command 
CommandManager.Register(command); // Create CommandManager class that will have mechanism of registering command, and has reference to object container. method is something like command.Set(Object container)
command.Execute(this); // pass instance as parameter, and in the Execute it will be similar to container.Remove(parameter);

以上代码只是大纲,大家可以根据需求自定义。可以类似地添加其他操作(如重命名)。

于 2012-05-16T03:30:40.970 回答