我建立一个小网站有趣的学习使用一种相当标准Web/服务/数据访问层的设计。

救我从不断有创建的实例我的服务层/数据访问层上课,我有制的方法在它们所有静态的。我不应该得到的并发问题,因为它们使用当地变量等和不分享任何资源(物是很简单的这个时刻).

尽我所能看到的只有折是,我不是真正的下一个真正面向对象的方法,但随后又保持码干净多了。

是没有任何理由,这会不是一个可行的办法?什么样的问题可能会出现以后?它会更好具有"工厂"类可以回我的实例的服务和数据层的类作为必要的?

有帮助吗?

解决方案 3

缺点:

  • 你将无法向编写单元测试因为你将无法写入模拟数据存取/商业逻辑的对象进行测试。
  • 你会有的并发问题作为不同的线试图访问静态码在同一时间或者如果使用同步静态的方法,你将最终线排队使用静态的方法。
  • 你将不能够利用实例的变量,这将成为一个限制的代码变得更加复杂。
  • 它将更加难以替换元件的业务或数据存取层,如果你需要。
  • 如果你打算编写应用程序以这种方式你会更好使用的一种语言设计工作,以这种方式,例如PHP.

你会更好,会非静态的业务/数据访问层的课程:

  • 使用单一的模式(建立一个单一实例的各类和分享他们在线)...
  • 或者创建的实例类中的每一个线程和在需要的时候。

请记住,每个用户/话连接到你的申请将运行在它自己的线-所以,你的网页应用程序本身就是多线程的。

其他提示

你知道那些游乐园里的游乐设施,他们说“请随时把你的手脚放在车内”吗?事实证明,如果你不这样做,骑行会更有趣。唯一真正的权衡是你并没有真正遵循一个真正的保持 - 你的手和脚 - 在所有时间的骑行方法。

关键在于 - 有一个原因你应该遵循“真正的OO方法”,正如有理由将你的手脚放在车内 - 这一切都非常有趣,直到你到处开始出血。

你描述它的方式,这不是“错误的”。方法本身,但我真的没有看到你试图避免的问题。您是否只能在服务器启动时创建这些业务对象的单个实例,并根据需要将它们传递给您的servlet?

如果您准备将OO抛出窗口,您可能还想查看Singleton模式。

我真的不见的优点给你的设计,并且有许多事情可能出错。你是省一行代码,也许?这里的一些缺点,以你的方法:

  • 你不能轻易地更换的实现你的商务逻辑
  • 你不能定义的实例的变量来促进分裂的逻辑进入多种方法
  • 你假设是多线程的问题将不会出现几乎可以肯定是错误的
  • 你不能轻易嘲笑他们的测试

我真的没有看到这一遗漏一行代码是你买任何东西。

它不是一个真正的"OO设计"的问题,但更多的适当性。为什么你甚至使用Java在这样一个程序性的方式?当然PHP会更适合以这样的设计(和实际节省你的时间没有汇编和部署).

我只想让你的业务层非静态的;它将使它更容易维持、改变、和发展应用程序。

您可能难以使用此类架构对对象进行单元测试。例如,如果您有一层引用静态数据访问层的业务对象,则可能难以测试业务层,因为您将无法轻松使用模拟数据访问对象。也就是说,在测试业务层时,您可能不希望使用“真实”层。数据访问层中的方法,因为它们会对数据库进行不必要的更改。如果您的数据访问层不是静态的,则可以向业务层提供模拟数据访问对象以进行测试。

我认为对于具有多个用户的所有静态方法,您将遇到并发问题。 Web层将线程化并发用户。你的所有静态方法都可以处理吗?也许,但他们不会经常被锁定在单个文件中排队请求吗?我不确定,从未尝试过你的想法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top