gpt4 book ai didi

php - 使用 JavaScript 进行依赖注入(inject) |有用还是没用?

转载 作者:行者123 更新时间:2023-11-28 20:57:42 25 4
gpt4 key购买 nike

我在 PHP 中使用依赖注入(inject)(标记为 b.c. 用作比较),因为这似乎是最佳实践。 PHP 有更多面向 OO 编程的结构,但在 JavaScript 中使用 DI 似乎也可以实现解耦代码。

就我而言,这有点复杂。我的对象包含对象属性(函数对象),每个属性都有自己的依赖项。

下面是有问题的代码,它具有我在顶级对象内创建的 3 个依赖项,但正在考虑注入(inject)。

当它们在单个对象 MC.MATweet 中的不同函数对象中使用时,我到底应该在哪里注入(inject)它们?

这 3 个对象是 SText、SMessage 和 SUniversals。

/**
** MATweet - Text, Universal, Message - Inject?
*/

MC.MATweet = {
init: function() {
var tweet_button = document.getElementById( 'po_but' ),
tweet_input = document.getElementById( 'po_in' );
tweet_button.addEventListener( "click", function() {
MC.Controller( MC.o_p( 'MATweet' ) );
}, false );
tweet_input.addEventListener( "keypress", function( event ) {
if( event.keyCode === 13 ) {
MC.Controller( MC.o_p( 'MATweet' ) );
event.preventDefault();
}
}, false );
sStyle( [ "po_in","po_lab" ] );
},
pre : function( o_p ) {
var form_elements = document.getElementById( 'fo_po' ).elements,
text_object = new SText( form_elements ),
universal_object = new SUniversals();
if( universal_object.get('load') === '1' )
{
if( !text_object.checkEmpty() ) {
return MC.MATweet.message( 'empty', o_p );
}
if( !text_object.checkPattern( 'tweet' ) ) {
return MC.MATweet.message( 'tweet', o_p );
}
}
o_p.args.hash = localStorage.hash;
o_p.page = text_object.getArray();
return o_p;
},
post : function( o_p ) {
if( o_p.server.result === 'true' ) {
MC.C.resetView( 'po_in' );
vTPane( o_p.server.tweets );
}
},
message: function( type, o_p )
{
var response_element = document.getElementById( 'i_box_rr' ),
pane_element = document.getElementById( 'i_box_r_post' ),
message_object = new SMessage( response_element ),
cover_element = document.getElementById( 'po_but_cov' );

o_p.result = 'complete';
message_object.display( type );
cover_element.style.display = 'inline';
MC.MATweet.movePane( pane_element, 30, 'down' );
return o_p;
},
movePane: function( pane_element, pos, dir ) {
if( ( dir === 'down' ) && ( pos < 70 ) ) {
pos += 1;
pane_element.style.top = ( pos ) + 'px';
setTimeout( function( ){ MC.MATweet.movePane( pane_element, pos, dir ); }, 1 );
}
else if( ( dir === 'down' ) && pos === 70 ) {
dir = 'up';
setTimeout( function( ){ MC.MATweet.movePane( pane_element, pos, dir ); }, 2000 );
}
else if( ( dir === 'up' ) && ( pos > 30 ) ) {
pos -= 1;
pane_element.style.top = ( pos ) + 'px';
setTimeout( function( ){ MC.MATweet.movePane( pane_element, pos, dir ); }, 1 );
}
else if( ( dir === 'up' ) && ( pos === 30 ) ) {
document.getElementById( 'po_but_cov' ).style.display='none';
}
},
};

最佳答案

你是对的,示例代码很脆弱并且依赖于系统的许多其他部分。

但是这个类不会因为添加依赖注入(inject)而变得更简单——它只会更难阅读和修改。问题不在于它命名了它调用的外部功能,而在于它首先调用了如此多的外部代码片段。

现在,此代码处理用户输入推文、发送到服务器的推文以及显示的推文之间的所有编码和交互。难怪是个毛团。将它们分成单独的类,每个类只负责一件事,并通过事件进行通信,而不是通过相互调用。

因此,您的推文输入 View 类仅负责发出包含单个字符串和推文文本的“new_tweet”消息。

您的推文显示 Pane 类监听推文列表的更改并重绘自身。

创建推文输入 View 的 Controller 代码,还将“new_tweet”事件的监听器附加到它,然后发送这些新推文以发布到服务器。

通过这种方式,您的代码将最大限度地减少交织,从而提高理解性、可重用性和美观性。

关于php - 使用 JavaScript 进行依赖注入(inject) |有用还是没用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11768407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com