假设您将所有数据存储在类中,例如KittenStorage
。然后,您有一个想要找到特定颜色小猫的类,可能称为KittenFinder
。显然,您已经设计了面向对象的程序来区分这两个明显不同的类,但现在KittenFinder
需要直接与KittenStorage
交互。你如何连接这两个不同的类?
答案 0 :(得分:1)
您需要使用图层。首先,您需要一个数据访问层。该层将包含支持直接数据存储命令的类。接下来,您需要一个业务层。此层执行业务逻辑中需要执行的任何操作。该层将通过数据访问层使用数据存储。您可以选择创建一个引擎层,其中可能会实现一些更复杂的算法,这些算法将通过业务层与数据存储进行通信。最后,您拥有UI,它将通过引擎层或业务层与您的数据存储进行通信。在现实生活中,您的存储是一个数据库,您的数据访问层与数据库进行通信。我希望这很有帮助。
答案 1 :(得分:0)
让我们稍微改进你的例子 - 让我们说KittenStorage以storage.get(0)或storage [0]的形式为你提供对小猫的索引访问,并且它还有一个count或size属性来知道如何它储存的许多小猫。 这样就可以实现KittenFinder进行前向搜索,即
for (int i = 0; i < storege.size; i++)
{
//return kitten if matches
}
或它可以执行BinarySearch
此外,KittenStorage类可能包含持久性机制(如将小猫保存到数据库或文件)。也许它可以包含一个perisitance策略 - 一个不同的类,以便可以交换持久性机制。
这称为关注点分离 - 一个类应该只做一件事而且只能用一种方式 - 这样就很容易维护代码。
答案 2 :(得分:0)
取决于,有些人会在KittenStorage上放置一个返回小猫的Find Method。
假设KittenStorage是小猫的商店 KittenFinder是KittenStorage中小猫或小猫的发现者
小猫是一个可存储且可查找的物品 这也有一些行为,例如Scratch,它是可存储的和可查找的,然后Kitten将被IStorable链接到KittenStorage,而IFindable将KittenFinder连接到KittenStorage
还有一个很好的理由拥有DTO(数据传输对象)。这只是小猫的状态,即你发现和储存的小猫不会刮伤
基本上所有这些都假设还有一个PuppyStorage和PuppyFinder等,并且你希望尽可能地解耦。
答案 3 :(得分:0)
一般而言,KittenFinder对KittenStorage有“依赖”。您的问题是如何设置(注入)此依赖项。这取决于您选择的应用程序框架。 Spring框架是一种流行的方式。