Thủ tục lưu trữ Quy ước đặt tên? [đóng cửa]


11

Một trong những nhà phát triển cấp cao của chúng tôi đã tuyên bố rằng chúng tôi nên sử dụng quy ước đặt tên cho các thủ tục được lưu trữ với kiểu đặt tên "objectVerb", chẳng hạn như ("MemberGetById") thay vì kiểu đặt tên "verbObject" ("GetMemberByID"). Lý do cho tiêu chuẩn này là tất cả các thủ tục được lưu trữ có liên quan sẽ được nhóm lại với nhau theo đối tượng chứ không phải theo hành động.

Trong khi tôi thấy logic cho cách đặt tên này, đây là lần đầu tiên tôi thấy các thủ tục được lưu trữ được đặt tên theo cách này. Ý kiến ​​của tôi về quy ước đặt tên là tên không thể được đọc một cách tự nhiên và mất một thời gian để xác định những gì các từ đang nói và những gì thủ tục có thể làm.

Bạn đang làm gì trên này? Cách nào là cách phổ biến hơn để đặt tên cho một Proc được lưu trữ, và bạn có sử dụng hoặc sử dụng các loại quy ước đặt tên Proc được lưu trữ nào không?


1
"Tên không thể được đọc tự nhiên"? Bởi ai? Ngôn ngữ tự nhiên đầu tiên của bạn là gì? Tiếng Anh? Hay cái gì khác?
S.Lott

9
@ S.Lott - với tôi nó trông giống như một cái gì đó bạn nghe thấy trong một đầm lầy ở Degobah.
TZHX

1
Câu hỏi tuyệt vời! Có một số tiêu chuẩn tốt hơn là không có tiêu chuẩn, nhưng một số người có thể đưa khái niệm này đi xa hơn và đưa ra một tiêu chuẩn tốt. Chẳng hạn, Dijkstra đã viết về lý do tại sao nó lại có ý nghĩa hơn nhiều khi lập chỉ mục các mảng với 0 là phần tử đầu tiên chứ không phải là 1. developeronline.blogspot.com/2008/04/. Đây là một chủ đề có vẻ tầm thường, nhưng tôi cá là nó làm anh ta mày mò để tìm ra nó. Tương tự, Spolsky có một hệ thống tốt: joelonsoftware.com/articles/Wrong.html Một số suy nghĩ trả trước tránh đau đớn
Công việc

4
Tôi muốn nói rằng hãy loại bỏ các thủ tục được lưu trữ hoàn toàn;)
Michael Brown

Câu trả lời:


10

Hãy nhìn vào nó như thế này. Làm thế nào là phương pháp của bạn được tổ chức trong mã? Theo đối tượng, với các phương thức treo.

MyObject.GetById(int)
MyObject.Save()

Bằng cách các procs được lưu trữ của bạn bắt chước cách đặt tên đó, sẽ dễ dàng hơn nhiều để xem chúng liên quan đến mã nguồn của bạn như thế nào.

MyObjectGetById
MyObjectSave

Điểm tốt, nhưng SQL không phải là OO. Trong thực tế, nó RẤT khác với Java / C # / etc. mã có giao diện với nó. Việc để SQL làm việc của mình là điều tự nhiên và để Java làm việc đó. Nếu mã phải được tạo, nó có thể được thực hiện với ít nỗ lực.
Công việc

4
Tôi không nghĩ OO là một sự cân nhắc ở đây. Trên đây chỉ là một ví dụ về cách nó không tự nhiên như lần đầu tiên nó có thể sử dụng quy ước đặt tên như vậy.
Mark Freedman

2
Nếu bằng cách có một phương thức trong mã là "MyObject.GetById (int)" thì tại sao một Proc được lưu trữ cũng không được gọi là "MyObject.GetById"? Việc nhóm vẫn sẽ xảy ra và một dấu chấm sẽ phân tách giữa đối tượng / bảng và hành động muốn.
Chris

1
@Chris, tôi không chắc bạn có thể sử dụng '.' trong một tên Proc, nhưng chắc chắn sử dụng các nhóm objectVerb theo cách tương tự như người ta nghĩ về chúng. Tôi không nghĩ đến việc có được trước, tôi nghĩ về những gì tôi muốn, sau đó làm thế nào để lấy nó.
CaffGeek

1
@Mark Freedman, không nhất thiết phải là OO, bạn nhóm các thứ theo ngôn ngữ thủ tục theo cùng một cách, chỉ có điều chúng không có trong các đối tượng thực tế. Nhưng thường được thêm tiền tố vào những gì sẽ tự nhiên trở thành một đối tượng nếu mã được chuyển đổi. strCompare, strLen, v.v., objectAction
CaffGeek

6

Tôi cũng có thể thấy logic; nó nhóm các hành động với nhau theo thực thể. Tuy nhiên, nếu hành động của bạn luôn NHẬN, PUT và XÓA thì thay đổi trong cách đặt tên có thể không quan trọng lắm. Tôi thấy lợi ích tốt nhất từ ​​tiêu chuẩn đặt tên mới xảy ra khi bạn có các tên hành động duy nhất, ví dụ: "AccountTransferMoney", kiểu đó.

Điều quan trọng nhất là có một tiêu chuẩn duy nhất, và nó được mọi người tuân theo.


1
Đến từ một công ty không có tiêu chuẩn đặt tên chính thức (ngoài "tiền tố với sp"), có một tiêu chuẩn là điều duy nhất quan trọng.
Glen Solsberry

5

Bạn phải quyết định những gì nhà phát hành lớn hơn, tìm kiếm các procs bạn đang tìm kiếm hoặc nhanh chóng giải mã ý nghĩa của chúng?

Nếu bạn thấy:

thành viênGetID thành viênGetName thành viênGet This thành viênListS Something thành viênDelete

Tại một số điểm, một khi bạn đã tìm thấy "thành viên", bạn chỉ cần bỏ qua điều đó và đi từ đó.

Nhìn vào danh bạ. Nếu bạn muốn tìm John Smith, là Smith, Dave Smith, John Smith, Robert

có khó không Tôi không gọi mọi người bằng họ và sau đó là tên trừ khi đó là James Bond.


1
+1 Tôi thích câu hỏi này và các câu trả lời! Nó liên quan đến khả năng sử dụng, và điều đó có thể trở nên khá khó khăn và thú vị.
Công việc

0

Thay vì "objectVerb", bạn có thể sử dụng "namepace_verbObject", như Member_GetById.
Nó sẽ nhóm các thủ tục theo không gian tên và vẫn sử dụng cách đặt tên "verbS Something" truyền thống.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.