问题标签 [mixins]
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.
structuremap - 拦截方法调用以增加功能的最简单方法是什么?
假设我有一个返回Post
s 列表的存储库。存储库接口有一个GetAll()
方法可以执行它的建议。
现在按照我不应该将域逻辑放入存储库的理论,我想拦截对具体GetAll()
方法的调用,以便我可以将以下逻辑添加到GetAll()
结果中:
我想拦截它的原因是因为(1)我不想让客户端记住调用扩展方法(OrderByDescending
或一些无用的包装器),我希望每次都调用它并且(2)我不希望我的所有具体实现都必须记住对GetAll()
结果进行排序-我希望将此逻辑放在任何存储库外部的单个位置。
最简单的方法是什么?
我已经在使用StructureMap,所以如果我可以用它拦截它可能是一个低成本的选择。但我不认为 SM 拦截方法调用,只是对象实例的创建?
我需要使用代理或混合模式吗?我需要全力以赴使用 Castle Dynamic Proxy吗?还是我应该考虑另一种方法或组合?
我对我上面的特定示例的具体建议非常感兴趣。我是 AOP 的新手,所以请温柔一点。
python - 在 Python 中使用 MixIns 时出现菱形问题
请考虑以下代码实现一个简单的MixIn
:
运行main
导致如下错误:
问题是Story
和StoryHTMLMixin
都源自object
,于是钻石问题就出现了。
解决方案是简单地制作StoryHTMLMixin
一个旧式类,即删除继承自object
,因此,将类的定义更改StoryHTMLMixin
为:
运行时导致以下结果main
:
我不喜欢使用旧式类,所以我的问题是:
这是在 Python 中处理此问题的正确方法,还是有更好的方法?
编辑:
我看到最新的 Python 源代码UserDict
中的类定义了一个使用旧样式类的 MixIn(如我的示例中所示)。
正如所有人的建议,我可能会在不使用 MixIns 的情况下重新定义我想要获得的功能(即在运行时绑定方法)。然而,重点仍然存在——这是唯一一个在不求助于重新实现或回退到旧式类的情况下无法解决 MRO 的用例吗?
java - 其他具有编译时/运行时“混合”功能的框架,例如 Spring Roo for Java
我想知道是否有任何框架可以自动将方法注入 Java 类,类似于 Spring Roo 的“mixins”。
例如,在 Spring roo 中,我们按如下方式破坏类:
Roo 框架在编译时生成所有必要的方法,如下所示:
我不想使用 Spring Roo,但想要一些其他的框架来解决这个问题。
提前致谢。
阿布舍克
spring - 使用 Spring AOP 创建 mixin
有人可以提供一个示例代码片段,使用 spring-aop 介绍(mixin)缝合两个 java 接口吗?
我正在寻找 AspectJ 注释样式配置。此外,我的具体用例是将几个 java bean 拼接在一起,每个 bean 都实现自己的接口。因此,如果我可以通过使用 Spring XML 摆脱委托,而不是对委托进行编码,那就太棒了。
ruby - rubyists 是否从 mixins 引用访问器?
从 mixin 方法中引用扩展对象上的访问器是否被认为是不好的做法?一个简单的例子:
在这种情况下,我实际上只是将喉舌的需求直接移至 WindInstrument 模块,但在更复杂的场景中,访问器真正存在于扩展对象上才有意义呢?这只是一个不适当的关注点分离问题吗?
Mixin 对于添加不需要了解扩展对象状态的封装行为很有用。事实上,我的直觉告诉我,mixin 不应该了解任何状态。如果它需要状态知识,我通常会选择以下两种选择之一:
将状态放在一个类中,并通过组合而不是通过继承层次结构添加它。我的问题是,我知道rubyists 正在创建访问状态的 mixin,这使得设计更具可读性,如果不那么直观(对我来说)。
将喉舌作为参数传递给模块。甚至我都可以看出这似乎使设计变得混乱,并且在红宝石世界观中感觉像是可憎的。
这段代码会打扰其他人吗?我知道那里有很多聪明的人在使用 ruby,所以我认为问题出在我的身上。我错过了什么?我只需要冷静一下吗?你会怎么做?
css - 有没有办法获取传递给 Sass mixin 的参数数组?
各种新的 CSS3 属性接受无限的值集,即box-shadow
背景渐变。
举box-shadow
个例子,理想情况下应该能够做到:
任意数量的参数。问题是 Sass 需要确定数量的参数,即使不需要,我也不知道循环它们的方法。
到目前为止,我能想到的最好的 mixin 是这样的:
我正在尝试编写一组 Sass 供应商提供的 CSS3 mixin。(可在:https ://github.com/stevelacey/sass-css3-mixins 获得)。
显然,这是垃圾,冗长且仅限5种样式,有没有更好的方法?
编辑:
@Riklomas 向我指出了这一点:https ://gist.github.com/601806至少比我的代码少重复,仍在寻找合适的解决方案。
ruby - 在属于另一个模块的类中包含 Singleton 模块时的 ruby NameError
当我尝试将 Singleton 模块包含在本身存在于模块中的类中时,它不起作用。这是一个例子:
我得到的错误是:
未初始化的常量 Object::SomeClass (NameError)
我不确定如何告诉 Singleton 模块查找SomeModule::SomeClass
notObject::SomeClass
groovy - Groovy :: @Mixin 方法覆盖目标类方法
这看起来像是某种反向继承。
mixins 是否仅用作定义新方法的一种手段?
我当然可以使用传统的继承并使用扩展,但是用例需要一个表单构建器,其中每个域都有一个独特的表单实现,我想在我的应用程序控制器中捕获表单请求并执行 MyUniqueDomainForm.mixin DefaultFormMethods (所以我只需要在需要的时候定义默认方法,而不必在每个表单类中导入 my.package.app.DefaultFormMethods)
ruby-on-rails - 在 Ruby 或 Rails 中,为什么“包含”有时在类内,有时在类外?
我想
就是添加一个“mixin”——让Foo模块中的所有方法都被视为ApplicationController的方法。
但现在我看到的代码是
那么为什么它在外面ApplicationController
呢?这与把它放在里面的更常见的用法有什么不同ApplicationController
?
ruby-on-rails - Rails:来自模块的回调
我尝试这样做:
应用程序/模型/my_model.rb:
lib/my_module.rb:
但我收到一个错误:
我该如何纠正它。
我也是红宝石的新手。这些“属性”是什么类型:before_destroy、validates、has_many?它们是变量还是方法还是什么?谢谢