2017-07-21 2 views
1

sur un site Supposons de commerce électronique, il y a 2 façons d'ajouter un élément, un à partir du catalogue, un du panier ...Comment tarir un code

<btn class="add_item" data-type="cart"></btn> 
<btn class="add_item" data-type="catalog"></btn> 

Parce que ces fonctions sont à la fois sur l'ajout un article, il y a beaucoup de chevauchement. Cependant, parce qu'ils se produisent dans des endroits différents, il y a aussi des différences. Existe-t-il une convention en termes de format de code suivant des principes standard (par exemple, SRP, DRY, etc.)?

Je pose spécifiquement une question sur une convention, parce que j'essaie d'écrire plus de code «standard». FWIW, historiquement, j'ai toujours fait l'option B et j'ai l'impression que cela m'a finalement mené vers des fonctions très très longues avec des if/thens imbriqués qui ont été confus.

Option A

$(".add_item[data-type='cart']").click(function() { 
    doSomethingUniqueToCart(); 
    doSomethingSharedToAdd(); 
}) 

$(".add_item[data-type='catalog']").click(function() { 
    doSomethingUniqueToCatalog(); 
    doSomethingSharedToAdd(); 
}) 

Option B

$(".add_item").click(function() { 
    if ($(this).data("type") == "cart") { 
    doSomethingUniqueToCart(); 
    } else { 
    doSomethingUniqueToCatalog(); 
    } 
    doSomethingSharedToAdd(); 
}) 

Répondre

0

En général, il va plus efficace pour fixer les auditeurs spécifiques que d'attacher génériques et doivent demander des informations pour distinguer les cas. Je ferais probablement quelque chose comme,

$(".add_item[data-type='cart']").click(doSomethingUniqueToCart); 
$(".add_item[data-type='catalog']").click(doSomethingUniqueToCatalog); 
$(".add_item").click(doSomethingSharedToAdd); 
1

J'ai l'option C pour vous:

var functionList = { 
"cart":doSomethingUniqueToCart, 
"catalog":doSomethingUniqueToCatalog 
} 
$(".add_item").click(function() { 
    functionList[$(this).data("type")](); 
    doSomethingSharedToAdd(); 
});