业务层中的实例方法与静态方法[关闭]
Posted
技术标签:
【中文标题】业务层中的实例方法与静态方法[关闭]【英文标题】:Instance methods Vs Static Methods in the business layer [closed] 【发布时间】:2014-09-13 00:16:11 【问题描述】:我有一个典型的 Web 应用程序,其中的控制器调用业务方法。业务类中的方法应该使用静态方法还是实例方法来实现。业务层类不维护任何状态信息。
一些附加信息 + 商务舱不维护州特定信息。 + 与使用静态方法相比,基于每个请求实例化这些对象会消耗大量内存
【问题讨论】:
我建议远离静态变量。如果方法都是独立的(即不使用任何静态变量),是的,那么你可以去做。 【参考方案1】:“是”算作回答吗?我不想这么说,但两个答案都是有效的;在它们之间进行选择需要上下文。如果您没有使用每个实例的状态,那么:为什么要创建实例?但是,应该注意的是,每个实例的状态对于 IoC/DI 场景很有用,这反过来又便于测试。
【讨论】:
始终使用通过某些 IOC 创建的实例方法。此建议的原因是允许测试人员为您的业务逻辑层提供存根并仅将测试集中在他们感兴趣的层上,从而允许对您的应用程序进行适当的测试。尽管可以使用假垫片来转移呼叫对于静态方法,它仅在更高版本的 VS.net (Ultimate) 中可用,并且仅用于测试遗留代码。如果您从头开始,请通过接口呈现所有逻辑,这反过来又要求它们不是静态的。 @PhillipH 始终对任何以“always”开头的陈述保持谨慎;p 什么构成适当的方法在很大程度上取决于手头的问题,以及不同方法正在“解决”什么。 IMO 说绝对的东西几乎是毫无意义的。指出每个选项的优缺点,让开发人员为他们面前的工作选择最合适的工具会更有用。 Marc,同意“谨慎”,但实例方法比静态方法更适合可测试性,而且我还没有找到不是这种情况的实例。可能应该说“强烈推荐”。 :-) 谢谢大家的回复,这提供了很多信息。还有一个问题,如果我使用静态方法而不是实例,我会在内存分配方面获得收益吗?因为对于每个请求,我将创建多个实例,而不是仅使用静态方法? @user3547774 通常,与每个请求发生的其他分配相比,一些业务层实例可以忽略不计 - 它不应该有很大的不同,而且它们通常收集起来很便宜(最坏的第 0 代或第 1 代)以上是关于业务层中的实例方法与静态方法[关闭]的主要内容,如果未能解决你的问题,请参考以下文章