2010-07-01 26 views
13

Giả sử tôi có phương thức, Foo(). Chỉ có một số thời điểm nhất định khi Foo() phù hợp, được xác định theo phương pháp ShouldFooNow(). Tuy nhiên, có rất nhiều lần chương trình phải xem xét nếu Foo() là thích hợp vào lúc này. Vì vậy, thay vì viết:Quy ước đặt tên tốt cho các phương pháp thực hiện hành động có điều kiện là gì?

if ShouldFooNow(): 
    Foo() 

ở khắp mọi nơi, tôi chỉ làm cho điều đó thành một chức năng:

def __name(): 
    if ShouldFooNow(): 
     Foo() 

Điều gì sẽ là một tên tốt cho phương pháp này? Tôi đang gặp khó khăn trong việc đưa ra một quy ước tốt. IfNecessaryFoo() rất khó xử, đặc biệt nếu Foo() có tên dài hơn. DoFooIfShould()? Thậm chí còn khó xử hơn.

Phong cách tên tốt hơn là gì?

Trả lời

13

Tôi nghĩ bạn khá thân thiết. Đặt hành động/ý định ở phần đầu của tên phương thức, để tìm kiếm chữ cái dễ dàng hơn. Nếu tôi đang viết một cái gì đó như thế, tôi muốn xem xét

FooIfNecessary() 
FooIfRequired() 

Say, ví dụ,

ElevatePermissionsIfNecessary() 
0

Bạn có thể sử dụng EnsureFoo(). Ví dụ, phương pháp EnsurePermissions() sẽ thực hiện hành động thích hợp nếu cần. Nếu các điều khoản đã đúng, phương thức sẽ không làm gì cả.

1

Tôi vừa mới bắt đầu sử dụng các quy ước:

FooIf(args, bool); 

đâu args là bất kỳ đối số nào mà phương thức nhận và bool hoặc là mong đợi một giá trị boolean hoặc một Func của một kiểu nào đó có thể phân giải thành một boolean. Sau đó, trong phương thức đó, tôi kiểm tra bool và chạy logic. Giữ các xác nhận như vậy xuống một dòng và trông sạch sẽ với tôi.

Ví dụ trong mã của tôi # C cho khai thác gỗ:

public void WarnIf<T>(T value, string message, Func<T, bool> isTrue) 
{ 
    if (isTrue(value)) _log.Warn(message); 
} 

Sau đó, tôi sẽ gọi nó với cái gì đó như:

WarnIf(someObject, "This is a warning message to be logged.", s => s.SomeCondition == true); 

(người gọi đó có thể không đúng, nhưng bạn sẽ có được ý tưởng .. Tôi không có mã trước mặt tôi ngay bây giờ.)

+1

Đó có phải là cách bạn gọi là 'WarnIf()?' Wheres là arg đầu tiên? –

+0

Đã chỉnh sửa. Tôi đã bỏ lỡ điều đó một cách vội vàng. Đã quá quen với các phương pháp mở rộng mà tôi đã viết cả ngày :) – David

Các vấn đề liên quan