- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在我最近做的一些遗留 c# 代码的代码审查中,我看到了很多这样的例子:
class ManagerParentClass
{
public string CustomProperty{get;set;}
public void Log(string message);
void DoABunchOfTasks()
{
new SomethingService().DoSomething(this);
}
}
具有以下内容:
public class SomethingService
{
ManagerParentClass _manager;
void DoSomething(ManagerParentClass manager)
{
_manager = manager;
// do something
_manager.CustomProperty = "hello world";
_manager.Log("said hello world");
}
}
虽然这在表面上工作得很好,但我担心这有点反模式,可能会导致垃圾收集的不良后果。
这是否会破坏 .Net 中的分代垃圾收集器正确清理父对象和子对象的能力或其他任何负面影响?
最佳答案
哦,是的,这通常是一个可怕的反模式。我使用的代码库经常使用它,这简直是疯狂。
最大的冒犯?违反封装以及随之而来的类之间的紧耦合:SomethingService
对ManagerParentClass
了解太多,ManagerParentClass
放弃了对自己的控制到 SomethingService
。
两个更好的选择:
DoSomething()
成为ManagerParentClass
的实例方法,这更符合面向对象的一个要点:数据结构携带它们的运算符SomethingService
成为一个纯方法,该方法进行一些计算并返回一个值,然后调用者可以将分配给 ManagerParentClass
<当然,这两种重构都涉及 ManagerParentClass
的最终突变,从函数式编程的角度来看,我会尽量避免这种情况。但是,如果没有更多信息,我无法为此推荐一门类(class)。
关于c# - 传递父对象作为父对象交互的引用的做法是邪恶的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17386683/
如果您想分享更多信息,可以在这里找到整个资源 指针: https://github.com/sergiotapia/DreamInCode.Net 基本上,我的API将为其他开发人员提供
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我不是 SCM 工具的经验丰富的用户,尽管我确信它们的用处,当然。 我在以前的工作中使用了一些不起眼的商业工具,在当前的工作中使用了 Perforce,并在我的小型个人项目中使用了 TortoiseS
所以我想知道一些我应该避免在 javascript 中做的事情以获得良好的 SEO 排名。在我的下一个站点中,我将广泛使用 jquery 和 javascript,但不想牺牲 SEO。那么您认为我应该
基本上,我想知道什么是避免 future CSS 代码出现问题和混淆的最佳方法... 像这样命名 CSS 属性: div#content ul#navigation div.float-left (真
我是一名优秀的程序员,十分优秀!