问题标签 [ooad]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
42 浏览

database - 在数据库中持久化循环依赖类

假设我有两个属于这种形式的类

在数据库上存储和检索它的最佳方法是什么?这是这种关系的最佳设计吗?

0 投票
15 回答
17075 浏览

oop - 如何避免 getter 和 setter

我在很多地方读到“getter 和 setter 是邪恶的”。我明白为什么会这样。但我不知道如何完全避免它们。说 Item 是一个包含项目名称、数量、价格等信息的类……而 ItemList 是一个包含项目列表的类。要找到总计:

在上述情况下,如何避免 getPrice()?Item 类提供 getName、setName 等......

我该如何避免它们?

0 投票
3 回答
156 浏览

architecture - 这个小程序的设计?

在此处输入图像描述请不要介意我的问题,因为它有点理论。

上周我接受了一个工作面试,我被分配了一个任务,后来他们问了问题,我的设计有问题。所以我没能得到这份工作。我正在分享我的设计。请查看它并建议我哪里错了,什么解决方案将是一个好的设计。

问题 这是为建造游泳池的建筑公司提供的软件包。游泳池有 2 个部分的游泳池周边区域和游泳池。两者(游泳池和周边区域)都可以是矩形或圆形(请参见附图),因此将有 4 种可能的形状。程序应计算阴影面积(水池到混凝土的外部区域)。

****公式**计算矩形面积**是长*宽*2 计算圆形面积的公式是2 * 2.1718

我的设计 我用 2 种方法(1)CalculateCircularArea(2)CalculateRectangularArea 制作了 IPool 接口。制作了 2 个实现 IPool 接口的类(CircularPool、RectangularPool)。

问题 如果除了矩形和圆形之外还有更多的形状怎么办?假设有 100 种其他形状,未来的招股说明书会考虑什么解决方案?在这里,我的设计并不好,因为当新形状出现时需要更改界面。

0 投票
2 回答
1019 浏览

c# - “不要在设计中使用抽象基类;但在建模/分析中”

尽管我在 OOAD 方面有一些经验,但我是 SOA 的新手。

SOA 设计的指导原则之一是“仅使用抽象类进行建模。从设计中省略它们”。抽象的使用有助于建模(分析阶段)。

在分析阶段,我提出了一个 BankAccount 基类。从它派生的专门类是“FixedAccount”和“SavingsAccount”。我需要创建一个服务,它将返回用户的所有帐户(帐户列表)。满足要求的服务结构应该是什么?

注意:如果您可以使用WCF提供代码演示,那就太好了。

0 投票
2 回答
135 浏览

php - PHP类建模问题

我已经写了几节课,并且在我应该做什么的道路上遇到了一个岔路口。我的基本问题是,如何避免在具有非常相似功能的类之间重复我的代码?特质现在对我来说不是一个选择,而且我认为它们在这里不会有太大帮助。

我实现了以下类。

这些类为我提供了一些 SPLFileObject 类型的功能。我可以做以下类型的事情

每次我调用 getFileSystemObject 方法时,它要么返回一个新的类对象,要么返回一个已经分配给该路径的对象,从而避免我创建多个指向文件系统上相同路径的对象。(也许不是最好的主意,但这就是我的想法。)

这是我们解决问题的地方。

我有另一组用于“锁定”对象的类。现在,我锁定的唯一对象是 filesystem_objects,无论它们是目录还是文件。通过根据试图锁定它的 php 进程的进程 ID 为文件创建一个锁定文件,这很简单。

我现在面临的问题是我想创建一个也可以锁定的 Zip 文件对象,并且我希望能够锁定几乎任何文件/目录,但我不想复制代码。我应该做以下哪一项

现在我倾向于选项 3,但我不想这样做的唯一原因是因为那时我必须在我想使用文件系统的东西时拥有我的库的“储物柜”部分;它会更紧密地耦合。

我相信你会对设计有意见,有些人会说“SplFileObject 做了所有/大部分”。我在这里包含了一些方法作为示例,并不是我实现的所有方法都在这里,所以这不是我编写的唯一功能。然而,所有这些评论和更多评论都是受欢迎的,因为它们可能会让我找到一个可以避免整个问题的设计。

谢谢

0 投票
1 回答
305 浏览

jsf - 集成 JSF 和 Spring

使用 JSF 和 Spring 和 Hibernate 实现一个简单的登录屏幕。我在 Spring 中编写了服务和数据层 Bean,并将它们与 Hibernate 集成。

我在 JSF 中定义了一个注册(新用户创建)屏幕,其中包含两个字段用户 ID、密码,并将它们连接到一个托管 Bean。(Bean 名称:Users)这里这个 bean 也是域类。

现在单击 JSF 视图中的创建按钮,我需要调用 Service Bean 方法(它们是 spring bean)。为此,我看到我有两种方法可以做,

  1. 在用户托管 bean 中编写一个方法,该方法采用给定的用户、密码并调用 spring 服务 bean 方法,后者又调用 DAO bean 方法以将数据保存在 DB 中。但在这里我的问题是,在域类中编写控制器类型的方法在多大程度上是一种好习惯?

  2. 第二种方法是定义一个新的托管 Bean,它具有 Spring Service 对象作为属性(使用 spring+jsf 集成注入)和一个调用服务 bean 方法的方法。

我在做正确的设计吗?哪里不对了?请建议我更好的设计。

谢谢

0 投票
4 回答
204 浏览

oop - 当有 Car 类时,是否应该是可转换的子类 Car?

比方说,如果在我们的对象设计中,已经有一个Car类,现在有一些汽车对象就是敞篷车。

我们可以定义另一个 classConvertible和 subclass Car,但是假设我们稍后创建一个 class that is FourWheelDrivethat 也是 subclasses Car,然后,如果我们有 a FourWheelDrivethat is also a Convertible,那么我们该如何处理呢?

上面的设计与其他设计相比如何,它是类isConvertible中的布尔值,Car类中isFourWheelDrive也是布尔值Car,就像类的标志或属性一样Car。所以在这种情况下我们不会定义额外的类。

更新:在一个真实的例子中,在我们的项目中,有一个Credential类存储用户的信息:user_id、encrypted_pa​​ssword、email_address 等。当我们允许通过 Facebook、Gmail、Yahoo、MySpace(使用 JanRain)登录时,同事建议添加FacebookCredential, GmailCredential, YahooCredential, 所有这些子类Credential. 我有点不知所措,有这么多类,当你看到一个方法时,你必须看看是子类覆盖了它还是基类的方法。我会使用一个代码来告诉它是哪个凭据提供者(Facebook、Gmail 等),并使用这个提供者代码来做适当的事情。(例如,有些提供商已经验证了电子邮件地址,有些则没有)。所以我只是不知道我同事的方法是否更合适或更复杂。

0 投票
4 回答
1651 浏览

java - 在一些 Java 代码中,为什么类 Deck 扩展了 Card 类?

我正在阅读一些我不熟悉的Java代码,但是如果一个类Deck(对于一副纸牌),它已经有一个数组的实例变量Cards,那么为什么要Deck扩展或继承Card呢?我认为只有当 A 是 B 时,A 类才继承 B 类(猫继承动物,因为猫是动物)。

代码如下:

0 投票
4 回答
226 浏览

oop - 接口实现是否应该独立

作为面向对象的程序员,我遇到了一些遗留代码,这些代码引起了我的所有质问。

这是经常使用的模式: 一个接口有两个实现,一个实现调用另一个实现的方法。

现在,我认为应该对其进行重构,以便实现彼此不了解。如何做到这一点很简单。我无法清楚地弄清楚 - 并希望 SO 的好人能帮助我 - 是为什么。

我可以看到理论上的原因——这是一个糟糕的面向对象设计。但是我在这里扮演魔鬼的拥护者并问 - 两个实现相互了解的实际缺点是什么。为什么要花费时间和金钱来摆脱这种(在我看来)反模式?

任何有关此的信息或链接将不胜感激。

0 投票
2 回答
2105 浏览

ruby - 命令设计模式的组合

有没有人在 Ruby 中有一个使用命令组合的好例子?它是我在各种设计模式文献中看到的一种设计模式混合体,听起来很强大,但找不到任何有趣的用例或代码。