所以,正如一直以来向我指出 https://stackoverflow.com/questions/16148924/value-types-inferred-as-object-at-runtime-when-using-dynamic/16149405?noredirect=1#comment23075938_16149405(我完全同意),时间耦合 http://blog.ploeh.dk/2011/05/24/DesignSmellTemporalCoupling/是一种设计气味,一般有以下形式:
interface IDoSomething
{
void Initialise();
void DoSomethingThatOnlyWorksAfterInitialising();
}
在上面的形式中,您可能可以采取一些措施(通过构造函数注入或通过抽象工厂等)。
然而,这如何适用于工作单元?
我现在正处于 UoW 的欢乐混乱之中,看起来有点像
interface IUnitOfWork
{
void Initialise(); // sorts out connection sharing/opening/yada
void Rollback();
void Commit();
}
诚然,初始化仍然不应该在那里。我设法通过调用该方法来说服自己Enlist
就我而言。不过忽略这一点,are Rollback
and Commit
考虑根据时间耦合?
进一步的想法
稍微思考一下,是不是措辞的选择(“时间耦合”)是错误的,或者至少是我对措辞的解释是错误的?
在我看来,气味试图做的是让编码员不依赖某种形式的Initialise
方法,这可能是违反直觉的,正如EndpointAddressBuilder
上面链接中的框架示例。
但是,有效终止该类的进一步使用的方法是否可以接受?方法如Dispose
显然有某种形式的时间耦合;调用后尝试使用该类Dispose
会给你带来问题,你应该更清楚。类似地与Commit
, Rollback
,并且我怀疑在其他情况下还有其他各种例子。
是不是只和气味有关初始化耦合(或者其中一位博主可以想出一些更好的词语?)。