【发布时间】:2010-08-05 14:25:22
【问题描述】:
在大学里,我上了一门现代物理学课,我们在其中学习了狭义相对论。我完全被不同的参照系如何实际观察到一个物体的物理特性不同而既不正确而震惊。随着时间的推移,这个概念慢慢地改变了我的编程方式,现在我倾向于将类分为两大类,数据对象和观察(仅限函数)对象。
为了避免对这么简单的问题写一篇详尽而冗长的文章,我将尝试通过两个例子来解释我的意思。
首先,以我以前经常写的这种类型的代码为例:
class Deck
{
private Card[] cards;
public void Shuffle()
{
// shuffle algorithm
}
// other deck related functions like draw, cut, etc...
}
我现在写的场景通常是这样的:
class Deck
{
// by intention, i just mean some kind of immutable collection of cards
private ReadonlyCollection<Card> _Cards;
public Card[] Cards { get { return this._Cards; } }
}
interface IDeckHandler
{
Deck Shuffle(Deck deck);
// other deck related functions like draw, cut, etc..
}
class Dealer : IDeckHandler
{
// IDeckHandler implementation
}
Deck 不再负责实现对其起作用的功能。或者为了符合术语,套牌只是一组价值观,观察它的方式是观察者的责任。当然,可以有许多观察者以不同的方式执行操作。
对于第二个示例,我将使用一些我尝试过解释的人,以便更轻松地了解这一点。以我们在彩色纸上用彩色字母拼出一个单词的情况为例。我们有一个代理人负责阅读纸上的文字。现在假设代理是某种类型的色盲。从纸上发出的图像是相同的,但感知可能不同。观察者对对象没有深入的了解,也无法对其进行修改,只能对其进行解释。
正如我所说,这个概念推动了我的许多开发决策。回到这个问题,这是一种已发布的编程类型吗?如果是,您能否指出一些关于它的文献?我遇到了一些常见和不常见的场景,它们很难做出决定,当然还有一些我还没有想到或遇到过的事情,希望在文献中得到检验。
【问题讨论】:
-
一个想法:阅读控制反转。你会喜欢的。
-
哎呀,我的“现代物理学”课程主要是关于量子力学的。 (狭义相对论已经在“普通物理学”中介绍过。)我想看看不确定性原理会对你的编程产生什么影响! ;-)
-
这门课更像是一门调查课程,我们还涵盖了原子物理学和其他一些东西,但它侧重于关于世界如何运作的思想进程以及基于此的理论发展比什么都重要。
-
@Rui:我在观察者中大量使用 IoC 容器(尽管我试图不让人们误以为我指的是观察者模式)。当您尝试在应用程序中分配责任时,IoC 会产生一个非常自然的思考过程。
标签: design-patterns oop functional-programming