데이터 가져 오기를위한 메소드 이름 [닫힘]


103

경고 : 이것은 제가 게시하는 심각한 질문 / 토론이 아닙니다.하지만 대부분의 개발자가이 "문제"를 숙고 해 왔음을 확신합니다 ...

항상 어딘가에서 데이터를 가져와 반환하는 메서드의 명명 규칙에 대한 다른 의견을 얻고 싶었습니다.

대부분의 메서드 이름은 다소 간단하고 분명합니다 ... SaveEmployee (), DeleteOrder (), UploadDocument (). 물론 클래스의 경우에는 각각 간단한 형식 인 ... Save (), Delete (), Upload ()를 사용합니다.

그러나 나는 항상 초기 조치 ... 데이터를 얻는 방법에 어려움을 겪었습니다. 내가 마지막으로 사용한 것이 결코 만족스럽지 않기 때문에 모든 프로젝트에서 서로 다른 명명 규칙 사이를 뛰어 넘는 것 같습니다. 내가 말할 수있는 한 이것이 가능성입니다->

  • GetBooks ()
  • FetchBooks ()
  • RetrieveBooks ()
  • FindBooks ()
  • LoadBooks ()

당신의 생각은 무엇입니까?

답변:


126

그것은 일관된 의미론 에 관한 것입니다 .

질문 제목 에서 데이터 가져 오기 를 사용 합니다 . 이것은 의미 상 의미 상으로 의미있는 모호하지 않은 방식으로 얻는 것이 무엇 의미 하는지 정의해야한다는 점에서 매우 일반적입니다 . 이름 지정에 대해 생각할 때 올바른 길을 갈 수 있도록 다음 예제를 제공합니다.

  1. getBooks() 객체와 관련된 모든 책을 가져올 때 세트에 대한 기준이 이미 정의되어 있고 출처가 숨겨진 세부 정보임을 의미합니다.
  2. findBooks(criteria) 메소드 호출에 대한 매개 변수를 기반으로 책의 하위 세트를 찾으려고 할 때 일반적으로 다른 검색 기준으로 오버로드됩니다.
  3. loadBooks(source) 파일이나 db와 같은 외부 소스에서로드 할 때입니다.
  4. 나는 그들이 너무 모호과 함께으로 융합 얻을 때문에 검색 / 가져 오기 사용하지 것이다 GET 및 조건과 관련된 명확한 의미가 없습니다.

예 : fetch 는 어떤 엔티티가 원격지에있는 것을 가져 와서 다시 가져와야 함을 의미합니다. Dogs는 막대기 를 가져오고 retrieve 는 이전에 소유했을 수도있는 의미가 추가 된 가져 오기 의 동의어입니다 . GET은 동의어입니다 얻을 당신이 뭔가의 단독 소유권을 가지고 다른 사람이 동시에 그것을 얻을 수 있음을 의미한다뿐만 아니라.

의미론 은 매우 중요합니다.

의미와 관련된 언어학 및 논리 분야

주석은 getfetch 와 같은 일반 용어 가 특정 의미가 없으며 사람마다 다르게 해석 된다는 증거입니다 . 용어에 대한 의미를 선택하고 의미가 명확하지 않고 사용과 일치 할 경우 의미하는 내용을 문서화하십시오.

모호하거나 모호한 의미를 가진 단어는 개인적인 의견에 기반한 편견과 선입견으로 인해 다른 사람들에 의해 다른 의미를 부여하며 결코 잘 끝나지 않을 것입니다.


4
데이터가 데이터베이스에서 검색 할 것 인 경우에 나는 검색 / 가져 오기 사용 거라고 추가 할 것
리즈 알빈에게

1
흠. 와일드 카드 기준과 특정 기준을 구분 하시겠습니까? 예를 들어 특정 출판사의 책을 찾을 때 FindBooks (출판사)를 사용 하시겠습니까? 아니면 GetBooksFromPublisher (publisher)?
Jason

5
publisher.getBooks ()는 게시자가 게시자의 특정 인스턴스 인 경우 선호하는 방법입니다. Publisher가 BookSearchCriteria 인터페이스를 구현 한 Library.getBooks (publisher). 작성자가 BookSearchCriteria 인터페이스를 구현 한 Library.getBooks (author)와 동일합니다. 또한 논리적으로 Library.getPublishers ()를 팩토리 메서드로 사용합니다

3
이 답변에 감사드립니다. 확실히 약간의 명확성을 추가합니다. 본질적으로 특정 필터에 의한 검색 방법은 객체와 함께 있어야합니다. 인터페이스는 어떤 방식으로 사용됩니까? 예를 들어 BookSearchCriteria 인터페이스입니다. 샘플 코드를 제공 할 수 있습니까?
Jason

2
일반적으로 이름 지정은 fetch데이터 액세스 시간낮을 때 와 같습니다 . 즉, 동일한 장치, 로컬 데이터베이스, 메모리에서. load또는 download액세스 시간 인 경우 더 높은 파일, 인터넷, 외부 DB에서,
야노

13

솔직히 어떤 명명 규칙을 사용할 것인지 팀과 함께 결정해야합니다. 그러나 재미를 위해 다음 중 하나를 결정하기 위해 생각하는 기차가 무엇인지 살펴 보겠습니다.

  • GetBooks ()

이 메소드는 데이터 소스에 속하며, 어떻게 가져 오는지 신경 쓰지 않고 데이터 소스에서 가져 오려고합니다.

  • FetchBooks ()

데이터 소스를 블러드 하운드처럼 취급하고 책을 가져 오는 것이 그의 임무입니다. 한 번에 얼마나 많이 입에 들어갈 수 있는지 스스로 결정해야한다고 생각합니다.

  • FindBooks ()

데이터 소스는 사서이며 Dewey Decimal 시스템을 사용하여 책을 찾습니다.

  • LoadBooks ()

이 책은 일종의 "전자 책가방"에 속하며 그 안에 넣어야합니다. 로드 후에는 ZipClosed ()를 호출하여 손실을 방지하십시오.

  • RetrieveBooks ()

나는 아무것도 없다.


1
받아 들여진 대답은이 대답뿐만 아니라 "get"과 "fetch"를 잘 구별하지 못했습니다. Fetch는 처리하는 데 시간이 걸리거나 전문 지식이 필요하기 때문에 다른 사람이 수행해야 함을 의미하는 반면, get은 즉시 사용 가능하거나 "기성품"임을 의미합니다.
Sridhar Sarnobat

나도 오늘 받아 들인 대답에 문제가 있습니다. 내 프로젝트 (React / Redux 기반)의 경우 Redux 스토어에서 가져온 데이터와 앱의 데이터베이스 및 타사 API를 구별하는 것이 중요하다고 생각합니다. 이를 올바르게 설정하면 향후 가독성에 확실히 도움이 될 것입니다. 원래 개발자 add는 데이터베이스에 쓰기와 저장소에 쓰기를 모두 수행했습니다. 이제 나는 그것들을 분리하려고 노력하고 있는데 그것은 고통입니다.
tim.rohrer

9

대답은 당신이 편한 것에 집착하고 일관성을 유지하는 것입니다.

barnes and nobles 웹 사이트가 있고 GetBooks ()를 사용하는 경우 Movie 엔티티와 같은 다른 항목이 있으면 GetMovies ()를 사용하십시오. 그래서 당신과 당신의 팀이 좋아하고 일관성을 유지하십시오.


22
적어도 당신은 일관된 철자 오류에 일관성이 있습니다. ;-)
Wim Hollebrandse

1
일관성있는 매우 일관성 ... :)
JonH

전혀 불쾌하지 않습니다 ... 지적 해 주셔서 감사합니다.
Jason

2

OO (C ++ / Java)에서는 getSomething 및 setSomething을 사용하는 경향이 있습니다. 항상 그런 것은 아니지만 해당 데이터 개체를 나타내는 클래스에서 개인 속성을 가져 오거나 설정하는 게터 / 세터 쌍이기 때문입니다. 플러스로 Eclipse가 생성합니다.

"메모리에로드"에서와 같이 파일을 의미 할 때만로드를 사용하는 경향이 있으며 일반적으로 기본 요소, 구조체 (C) 또는 객체로로드하는 것을 의미합니다. 웹에서 보내기 / 받기를 사용합니다.

위에서 말했듯이 일관성은 모든 것이며 여기에는 교차 개발자가 포함됩니다.


1

"데이터 가져 오기"의 의미는 명확하지 않습니다. 데이터베이스에서? 파일? 기억?

메서드 이름 지정에 대한 나의 견해는 그 역할이 모호함을 제거하고 이상적으로는 문서를 찾을 필요가 없다는 것입니다. 나는 이것이 더 긴 메소드 이름을 희생하여도 이루어져야한다고 믿습니다. 연구에 따르면 대부분의 중급 이상 개발자는 낙타 케이스에서 여러 단어를 읽을 수 있습니다. IDE 및 자동 완성을 사용하면 긴 메서드 이름을 작성하는 것도 문제가되지 않습니다.

따라서 "fetchBooks"를 볼 때 컨텍스트가 명확하지 않은 경우 (예 : BookFetcherFromDatabase라는 클래스) 모호합니다. 어디에서 가져와? 가져 오기와 찾기의 차이점은 무엇입니까? 또한 일부 개발자가 의미론을 특정 키워드와 연관시키는 문제가 발생할 위험이 있습니다. 예를 들어 데이터베이스 (또는 메모리) 가져 오기와로드 (파일에서) 또는 다운로드 (웹에서)를 비교합니다.

차라리 "fetchBooksFromDatabase", "loadBookFromFile", "findBooksInCollection"등과 같은 것을보고 싶습니다.보기에는 좋지 않지만 길이를 넘으면 명확합니다. 이 글을 읽는 모든 사람들은 당신이하려는 일을 즉시 얻을 것입니다.


4
fetchBooksFromDatabase의 문제는 인수 / 일반화하고 fetchBooks를 원할 때 XML에서 데이터를 가져올 수 있다는 것입니다. 나는 세부 사항도 좋아하지만 다른 함수 이름에 걸쳐 동일한 기능을 분리하는 자신을 발견 합니다 . 그리고 그 선생님은 멋지지 않습니다!
JonH

Get 대 Find의 차이점은 분명한 경향이 있지만 Get 대 Fetch에 관한 질문이 궁금합니다. 지옥 .. 차이가 있습니까?
Jason

@JonH : 동의합니다. 그러나 다른 유형의 페치가 있다는 것을 미리 알고 있다면 클래스 이름 지정에 인코딩했을 것입니다 (예 : DatabaseConnector 대 XmlConnector와 같은 컨텍스트에서 의미를 해석 할 수 있음).
Uri

7
@Jason : "게터"는 매우 편재하기 때문에 (그리고 JavaBeans와 같은 프레임 워크의 일부이기 때문에) 많은 프로그래머는 데이터 필드에 액세스하는 거의 투명한 수단으로 생각하는 경향이 있습니다. 반면에 "Fetch"는 일부 프로그래머에게 데이터를 한곳에서 다른 곳으로 전송 (CPU 가져 오기) 또는 데이터베이스 가져 오기와 관련된 더 긴 액세스를 나타냅니다. 예를 들어, Hibernate의 쿼리 언어는 Fetch 구조를 가지고 있습니다. 개발자는 종종 문서를 읽는 대신 이름에 대한 기대에 따라 방법을 사용하므로 잘못된 신호를 보내는 것을 피하는 것이 중요합니다.
Uri
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.