Questions tagged «object-oriented-design»

面向对象的设计是规划用于解决软件问题的交互对象系统的过程。

4
如何反对业务对象类设计的这种“完全公开”的思维方式
我们做了很多的单元测试,我们的业务对象的重构,而我似乎有很对类设计比其他同龄人不同的意见。 我不喜欢的示例类: public class Foo { private string field1; private string field2; private string field3; private string field4; private string field5; public Foo() { } public Foo(string in1, string in2) { field1 = in1; field2 = in2; } public Foo(string in1, string in2, string in3, string in4) { field1 = …

2
编程到面向数据的接口
我们的代码库的一部分以以下样式编写: // IScheduledTask.cs public interface IScheduledTask { string TaskName { get; set; } int TaskPriority { get; set; } List<IScheduledTask> Subtasks { get; set; } // ... several more properties in this vein } // ScheduledTaskImpl.cs public class ScheduledTaskImpl : IScheduledTask { public string TaskName { get; set; } public …

8
防范数据库中错误的空条目的设计和实践
程序的一部分从数据库中的许多表和列中获取数据进行处理。有些列可能是null,但是在当前处理上下文中这是一个错误。 从理论上讲,这不会发生,因此,如果这样做,则表明数据错误或代码中存在错误。错误具有不同的严重性,具体取决于哪个字段null。也就是说,对于某些字段,应停止处理并通知某人;对于其他字段,应允许该处理继续进行,而仅通知某人。 是否有任何好的架构或设计原则来处理稀有但可能的null条目? 解决方案应该可以用Java来实现,但是我没有使用标记,因为我认为问题在某种程度上与语言无关。 我的一些想法: 使用NOT NULL 最简单的方法是在数据库中使用NOT NULL约束。 但是,如果原始数据插入比随后的处理步骤更重要,该怎么办?因此,如果插入内容将a null放入表中(由于错误或什至出于某些合理的原因),我不希望插入操作失败。假设程序的更多部分取决于插入的数据,但不取决于此特定列。因此,我宁愿冒险在当前处理步骤而不是插入步骤中出错。这就是为什么我不想使用NOT NULL约束的原因。 天真的取决于NullPointerException 我可以使用数据,就像我期望它始终存在一样(这确实应该如此),并在适当的级别上捕获生成的NPE(例如,以便停止当前条目的处理,而不是整个处理进度) )。这是“快速失败”的原则,我经常喜欢它。如果这是一个错误,至少我会得到一个已记录的NPE。 但是后来我失去了区分各种丢失数据的能力。例如,对于某些丢失的数据,我可以将其省略,但是对于其他一些数据,应停止处理并通知管理员。 null在每次访问之前进行检查并引发自定义异常 自定义异常可以让我根据异常来决定正确的操作,因此这似乎是可行的方法。 但是,如果我忘记在某个地方检查该怎么办?然后,我还会使用从未有过或很少有期望的空检查(因此绝对不是业务逻辑流程的一部分)使我的代码混乱。 如果我选择这种方式,哪种模式最适合该方法? 欢迎对我的方法提出任何想法和意见。还有任何更好的解决方案(模式,原理,代码或模型的更好体系结构等)。 编辑: 还有一个约束,因为我使用ORM进行从DB到持久性对象的映射,因此在该级别上执行null检查将不起作用(因为在null不会造成任何危害的部分中使用了相同的对象) 。我添加此内容是因为到目前为止提供的答案都提到了该选项。


2
Scala中的自我类型和特质继承有什么区别?
谷歌搜索后,出现了许多有关该主题的回复。但是,我觉得它们中的任何一个都无法很好地说明这两个功能之间的区别。所以我想再尝试一次,特别是... 使用自我类型而不是继承可以做什么,反之亦然? 对我来说,两者之间应该有一些可量化的物理差异,否则它们只是名义上的差异。 如果特征A扩展了B或自类型B,它们是否都说明存在B是必要条件?区别在哪里?

4
列表接口是泄漏抽象吗?
如果我有一个包含的变量,List则它可能包含许多不同类型的对象,例如ArrayList或LinkedList。a LinkedList和an 之间的差异ArrayList非常大。这些方法的大O行为差异很大。例如,对进行排序List,然后使用它进行二进制搜索是完全可以的,ArrayList但对则没有任何意义LinkedList。

7
面向对象需要哪些功能?
我只是想知道,语言或库必须提供什么功能才能将其定义为“面向对象”。是否可以在具有适当功能的任何通用编程语言中或多或少地实现对象定向?还是只能通过专门宣传它们支持面向对象编程的语言才能实现? 例如,看下面的C代码: SDL_Surface* screen = SDL_SetVideoMode( 640, 480, 16, SDL_HWSURFACE); SDL_FreeSurface( screen ); 或此处讨论的代码。 现在,上面的代码不使用继承,运行时多态性(?),虚函数等。但是对我来说,它似乎是非常面向对象的。 面向对象是否只是在编写基于不需要对象或编程语言或库提供的特殊模式或功能的可创建和可破坏的数据结构(例如对象,类,结构等)的代码?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.