나는 컨트롤 모듈 인 사용자 동작을 처리하는 특정 모듈을 가지고 있습니다. 6이 있었고, 이제 5가 있습니다. 2를 통합하면 Control이라는 모듈로 매우 유사합니다.코드 통합 대 복잡성
비슷한 코드를 통합하면 .... 덜 효율적이됩니다. 예를 들어 Control에서 프로그램 흐름을 결정하는 추가 논리 문이 있습니다.
if(this.type === 'signup' && !this.text_object.checkPattern('name'))
이 간단한 라인
은 내가 유일한 차이에서 가지고 있지 않은 로그인 가입하기에서 이름을 확인되면서 ControlSignIn 및 ControlSignUp을 결합 할 수 있었다.이 방법으로 계속할 수 있고 더 복잡한 코드를 얻을 수 있지만 코드 발자국은 더 작습니다.
(복잡도와 실행 시간) vs (코드 발자국) 사이에는 트레이드 오프가 있습니다.
나는 그것이 중요하지 않다고 생각하지만 나는 단지 확신하고 싶었다. 나는 또한 Control.
질문에 맞게 수있는 내가 ControlTweet
에 넣어 예를 들어
ControlTweet을 Control과 통합해야합니까?
일반적으로 어디에서 선을 그 으려는가요 아니면 선호하는 문제입니까?
제어
/**
*Control - receives incoming requests for client use
*/
var Control = (function()
{
var Control = function (type)
{
this.TIME = 4000;
this.type = type;
this.form_element = document.getElementById(type),
this.response_element = document.getElementById(type + '_response');
this.text_object = new TextValidator(this.form_element),
this.message_object = new Message(this.response_element),
this.effects_object= new Effects(this.response_element);
};
Control.prototype.invoke = function()
{
if(Global.validate_input_on === 1)
{
if(!this.text_object.checkEmpty())
{
this.message_object.display('empty');
this.effects_object.fade('down', this.TIME);
return false;
}
if(this.type === 'signup' && !this.text_object.checkPattern('name'))
{
this.message_object.display('name');
this.effects_object.fade('down', this.TIME);
return false;
}
if(!this.text_object.checkPattern('email'))
{
this.message_object.display('email');
this.effects_object.fade('down', this.TIME);
return false;
}
if(!this.text_object.checkPattern('pass'))
{
this.message_object.display('pass');
this.effects_object.fade('down', this.TIME);
return false;
}
}
var response_element = this.response_element;
new Ajax().invoke(serializeArray(this.form_element) + '&ajax_type=' + this.type + '_control', function(server_response_text) { ajaxType(server_response_text, response_element, 'respond'); });
};
Control.in = function()
{
new Control('signin').invoke();
};
Control.up = function()
{
new Control('signup').invoke();
};
Control.out = function()
{
new Ajax().invoke('&ajax_type=ControlSignOut', function(server_response_text) { ajaxType(server_response_text, 0, 'simple'); });
};
Control.try = function()
{
new Ajax().invoke('&ajax_type=ControlTryIt', function(server_response_text) { ajaxType(server_response_text, 0, 'simple'); });
};
return Control;
}());
내가 사용 결국 무엇 ControlTweet
/**
* ControlTweet
*/
function interfaceTweet()
{
var fill_element = document.getElementById('tweet_fill'),
form_element = document.getElementById('tweet'),
response_element = document.getElementById('tweet_response');
var text_object = new TextValidator(form_element),
message_object = new Message(response_element),
effects_object = new Effects(response_element);
if(Global.validate_input_on === 1)
{
if(!text_object.checkEmpty())
{
message_object.display('empty');
effects_object.fade('down', 4000);
return;
}
if(!text_object.checkPattern('tweet'))
{
message_object.display('tweet');
effects_object.fade('down', 4000);
return;
}
}
new Ajax().invoke(serializeArray(form_element) + '&ajax_type=ControlTweet_add', function(server_response_text) { ajaxType(server_response_text, response_element, 'tweet', fill_element); });
}
:
/**
*Control - receives incoming requests for client use
*/
var Control = (function()
{
var Control = function (type)
{
this.TIME = 4000;
this.type = type;
this.form_element = document.getElementById(type),
this.response_element = document.getElementById(type + '_response');
if(type === 'tweet') { this.fill_element = document.getElementById(type + '_fill'); }
this.text_object = new TextValidator(this.form_element),
this.message_object = new Message(this.response_element),
this.effects_object= new Effects(this.response_element);
};
Control.prototype.invoke = function()
{
if(Global.validate_input_on === 1)
{
if(!this.text_object.checkEmpty())
{
this.message_object.display('empty');
this.effects_object.fade('down', this.TIME);
return false;
}
switch(this.type)
{
case 'signin':
if(!this.text_object.checkPattern('email'))
{
this.message_object.display('email');
this.effects_object.fade('down', this.TIME);
return false;
}
if(!this.text_object.checkPattern('pass'))
{
this.message_object.display('pass');
this.effects_object.fade('down', this.TIME);
return false;
}
break;
case 'signup':
if(!this.text_object.checkPattern('email'))
{
this.message_object.display('email');
this.effects_object.fade('down', this.TIME);
return false;
}
if(!this.text_object.checkPattern('name'))
{
this.message_object.display('name');
this.effects_object.fade('down', this.TIME);
return false;
}
if(!this.text_object.checkPattern('pass'))
{
this.message_object.display('pass');
this.effects_object.fade('down', this.TIME);
return false;
}
break;
case 'tweet':
if(!this.text_object.checkPattern('tweet'))
{
this.message_object.display('tweet');
this.effects_object.fade('down', this.TIME);
return false;
}
break;
default:
}
}
var response_element = this.response_element;
if(this.type === 'tweet') { var fill_element = this.fill_element; }
new Ajax().invoke(serializeArray(this.form_element) + '&ajax_type=' + this.type + '_control', function(server_response_text) { ajaxType(server_response_text, response_element, 'respond', fill_element); });
};
Control.tweet = function()
{
new Control('tweet').invoke();
}
Control.in = function()
{
new Control('signin').invoke();
};
Control.up = function()
{
new Control('signup').invoke();
};
Control.out = function()
{
new Ajax().invoke('&ajax_type=ControlSignOut', function(server_response_text) { ajaxType(server_response_text, 0, 'simple'); });
};
Control.try = function()
{
new Ajax().invoke('&ajax_type=ControlTryIt', function(server_response_text) { ajaxType(server_response_text, 0, 'simple'); });
};
Control.bookmarkDelete = function(event_pull)
{
event_pull.preventDefault();
domBookmarkDelete(this);
new Ajax().invoke(encodeURIComponent(this.name) + "=" + encodeURIComponent(this.innerHTML) + '&ajax_type=ControlBookmark_delete', function() { });
}
return Control;
}());
이것은 매력적인 질문입니다. 내가 가지고있는 문제는 토론의 주제가 더 많으므로 한 가지 '올바른'답변이 될 가능성이 거의 없다는 것입니다. 따라서 스택 오버 플로우에 대한 [오프 주제] (http://stackoverflow.com/faq#dontask)입니다. 아마도 [프로그래머] (http://programmers.stackexchange.com/)가 더 좋은 집일 수 있습니까? –
나는 주관적이고 프로그래머와 스펙에 의해 결정되는 라인이 올바른 대답이라고 말할 것이다. 객관적이지 않은 주관적인 것으로 정의하는 것은 내가 생각한 것을 검증 할 때 나를위한 대답이다. 아무도 들어오지 않았고 어떤 의미에서 정답이라고 대답했습니다. –
나는 간단한 규칙이있다. 코드를 변경하기가 더 어렵게 만들려고한다면 내가 그렇게하는 이유는 그렇게하지 않는 것보다 더 나은 돈을 버는 .... –