English 中文(简体)
控制转化系统的活动有多大进展?
原标题:Events in an Inversion of Control (Dependency Inversion) system go which way?
  • 时间:2009-10-19 15:36:49
  •  标签:

<>Up or Down?

我是一位非常视觉的人。 我把我的申请视为一个等级,最高层是根基,底是一页。

我也认为,IoC集装箱无视其包含的物体责任/功能。 相反,这些物体通过一些抽象的接口知道其集装箱,即“正文”。

UP: (The non-IoC way?) Should my events be dispatched from the bottom of my hierarchy and bubble upwards via a Chain-of-Responsibility pattern to their parents so that the contained objects are unaware of their containers? E.g. a button in my GUI dispatches a CLICKED event, which is caught by a listening container window that responds by closing itself.

DOWN: (The IoC way?) Should my events be dispatched from the top of my hierarchy by a container and reach contained listeners that have subscribed directly to the container so that the containers are unaware of their contents? E.g. a container window dispatches a CLOSED event, which is received directly by contained button objects that respond by closing themselves and then the window follows suit by closing itself.

在我看来,由于IoC有一个集装箱不了解其含有的物体行为,我不想对其事件作出回应。

我认识到,让系统几乎有一部分能够倾听一次活动,但我想理解国际奥委会参与者之间的基本关系,,以便我能够适当安排这些活动。 假设人们不考虑结构性关系、依赖性等,通常不会仅仅夸大其方案。

我的问题源自于IoC系统的责任安排——它负有要求集装箱和集装箱有责任为其附属物体提供服务的责任(这vert倒了非IoC模式——因此是同义词“永久转移”。 这似乎是一个非常重要的基本组成部分——责任的转移。 我认为,把物体功能称作目标,或听从其事件作为视另一个目标而定的例子。 当一个物体根据另一个物体界定自己的行为时,我说,由于一个物体反对另一个物体KNOWS,而另一个物体是KNOWS。 它在其他物体的范围内界定了它。 据我所知,IoC的设立是为了让所装物体依赖集装箱,因此,应当由所装物体负责知道所有集装箱。 并且NOT应当成为了解所装物体的集装箱责任。 因此,为了使CONTAINER能够倾听关于CONTAINED的节目,我似乎喜欢把责任放在错误位置,因为这意味着它知道其内容。

www.un.org/Depts/DGACM/index_spanish.htm 这个问题在学习依赖性注射和转化后得到了重新阐述。 先前的问题见here

最佳回答

为了简洁起见,Im将集装箱内所含物体称为“客户物体”或仅指“客户”。

如果不在集装箱和客户之间引入不想要的附属条件,事件就能够合法地向这两个方向流动。 事实上,允许集装箱接收客户的事件,是最大限度减少这些依赖性的一种方法。 它们为松散的 coup合提供了一条道路,使集装箱能够继续无视客户在继续与他们沟通时的实际情况。 只要有关事件是由集装箱而不是客户界定的。

你似乎主要关注的是,客户物体永远会发生集装箱消耗的火灾。 如果客户目标界定了这些事件,这将是一个令人关切的问题。 这显然会给集装箱的客户物体造成难以依赖;集装箱必须知道这些客户界定的事件,并专门为他们编码。 这将挫败国际奥委会的主要想法。 但是,如果集装箱对这些事件加以界定,那么这并不是一种关切——事实上,这是将集装箱与客户物体松散地加在一起的最佳办法。 客户可向集装箱发射这些事件供消费,但并未界定这些事件。 他们只能向集装箱知道如何聆听集装箱规定的一套事件开火。 (当然,他们会为了其他目的向其他事件开火,但集装箱会 t或 care。)

例如,认为该集装箱能够显示和印刷“照片”,而该表中几乎没有内容箱(这似乎是你在你的岗位上背弃环境的类型,因为你提到了许多德国马克的例子,但这些概念与德国马克无关。 集装箱暴露了一种名为“印刷”的活动,该活动对印刷内容有某些参数(可能是指一个可装饰的界面,可能是印刷的原始数据,取决于你试图与你的IoC做些什么)。 集装箱内运行的客户物体,如果用户在客户物体上报一个 but子,可向印刷活动开火。 然后,该集装箱将接收该事件,并代表客户物体处理印刷。 或者客户物体可发射“秘密交易”活动,该集装箱将接收该活动,并相应地销毁发射该事件的客户物体(此外还有其他处理,包括如果用户确信会询问,等等)。

反之,当客户物体感兴趣的事情发生时,集装箱可能会发射事件。 同样,这些都只在集装箱内界定。 但客户目标可能赞同。 从前例来看,该集装箱可能暴露出客户物体可使用的一种印刷版活动,以在自称“Your document is do ”的电离层中显示用户的信息。 集装箱可发射“应用”信息,即所有客户物体均可用来冲破它们在集装箱完全关闭之前重新持有的任何本地资源。 这些只是sil笑、简单的例子,但希望它们能够表明这一想法。

因此,简言之,我认为,在从集装箱到客户和从客户到集装箱的双向流动时,不仅合理而且非常有用。 与“扩大”或“减少”无关的关键是谁界定这些事件。 集装箱界定了all

问题回答

集装箱不应知道其部件或它们的行为方式。 集装箱责任通常属于瞬时依赖领域,而不是通信依赖。 集装箱应当成为一般工厂。

这就是结构图! 我相信,你已经认识到,作为一个工厂,一个集装箱是你物体图的根基,但一个应对或出版事件的集装箱根本就没有意义。

那么,你们想要的是管理事件的人。 了解about事件的专门部分,并可向有关各方提供broker一个实例。 你们希望有一个普遍性的活动中介机构。 如果你愿意,会有一个活动路线。

你们也许会发现很多执行。 比如,卡宾斯帕克、棱晶活动聚合器或我喜欢的。 最后一点是,通过与卡宾广泛合作和与杰里米·米勒和格伦集团通信的经验。 肯特,冷藏/盖。

如果你使用集装箱,你很可能熟悉对控制的依赖性注射和转移。 某些需要出版活动的人被注入了IEvent Hub,并用一个高度分类的主题类别援引生态。 还有一些人需要参加某项活动,他们还引进了IEvent Hub,并安装了一种高度分类的ISubuser界面[基本上暴露了一种严格的接收方法]。 这就是说。

现在,事件可以采取[商业要求允许的]任何方式。





相关问题