Một đối số có lợi cho mã soạn sẵn là nếu bạn thay đổi nó ở một nơi, nó chỉ ảnh hưởng đến một luồng mã. Điều này phải được cân bằng với thực tế là thường xuyên hơn không, bạn thực sự muốn một thay đổi ảnh hưởng đến mọi đoạn mã sử dụng nó. Nhưng tôi đã thấy những ví dụ hiếm hoi ủng hộ lập luận.
Giả sử bạn có một đoạn mã nói
public ForTheBar(Foo foo)
{
Bar bar = foo.bar();
return bar.BeFooed();
}
Điều này được sử dụng ở khoảng 2 nơi trong mã của bạn.
Một ngày nọ có người đi cùng và nói "ok, chỉ trong con đường này, chúng tôi muốn bạn đến quán bar trước khi Fooing nó."
Và bạn nghĩ rằng "điều này thật đơn giản."
public ForTheBar(Foo foo, bool shouldIGrommit)
{
Bar bar = foo.bar();
if (shouldIGrommit)
{
bar.BeGrommitted();
}
return bar.BeFooed();
}
Sau đó, người dùng của bạn thêm một số chức năng mới và bạn cho rằng nó phù hợp với FooTheBar. Và bạn mạnh dạn hỏi họ xem bạn có nên Grommit thanh đó trước khi bạn Foo không và họ nói "không, không phải lúc này".
Vì vậy, bạn chỉ cần gọi phương pháp trên.
Nhưng sau đó, người dùng của bạn nói "ok, đợi đã, trong trường hợp thứ ba, chúng tôi muốn bạn Doodle Doodle Bar trước khi gọi BeFooed."
Không có vấn đề, bạn nghĩ rằng, tôi có thể làm điều đó.
public ForTheBar(Foo foo, bool shouldIGrommit, bool shouldIDoodle)
{
Bar bar = foo.bar();
if (shouldIGrommit)
{
bar.BeGrommitted();
}
if (shouldIDoodle)
{
bar.BeDoodled();
}
return bar.BeFooed();
}
Đột nhiên mã của bạn đang trở nên ít sôi hơn. Có lẽ bạn nên chấp nhận hai dòng mã lặp đi lặp lại. Bây giờ bạn sẽ có ba đoạn mã, mỗi dòng dài 2-3 dòng và trông không lặp lại nữa.
Tất cả điều này đã nói, tôi sẽ phản bác lại rằng "đây không phải là trường hợp phổ biến và khi nó xảy ra, bạn có thể tái cấu trúc".
Một lập luận khác mà tôi đã nghe gần đây là mã soạn sẵn đôi khi có thể giúp bạn điều hướng mã. Ví dụ chúng tôi đã thảo luận là nơi chúng tôi đã loại bỏ hàng tấn mã ánh xạ soạn sẵn và thay thế nó bằng AutoMapper. Bây giờ, nó đã được lập luận, bởi vì mọi thứ đều dựa trên quy ước, bạn không thể nói "Tài sản này được đặt ở đâu" với IDE và mong muốn nó biết.
Tôi đã thấy mọi người tranh luận những điều tương tự về container IoC.
Không nói rằng tôi đồng ý với họ, nhưng dù sao đó cũng là một cuộc tranh luận công bằng.