코드 냄새 144 - 대체 가능한 개체

우리는 NFT에 대해 많이 들었습니다. 이제 우리는 Fungible 개념을 마스터합니다.

TL;DR: Respect the . Make fungible what is Fungible in real-world and vice-versa.



문제


  • 결함
  • 오버디자인

  • 솔루션


  • 도메인에서 대체 가능한 요소 식별
  • 교환 가능한 모델로 모델링

  • 문맥



    Wikipedia에 따르면

    Fungibility is the property of a good or a commodity whose individual units are essentially interchangeable and each of whose parts is indistinguishable from another part.



    소프트웨어에서는 대체 가능한 객체를 다른 객체로 대체할 수 있습니다.

    객체가 실제 객체와 함께 있을 때 때때로 부분 모델을 잊어버리고 디자인을 덮어씁니다.



    샘플 코드



    잘못된




    public class Person implements Serializable {
        private final String firstName;
        private final String lastName;
    
        public Person(String firstName, String lastName) {
            this.firstName = firstName;
            this.lastName = lastName;
        }
    }
    
    shoppingQueueSystem.queue(new Person('John', 'Doe'));
    

    오른쪽



    public class Person  { 
    } 
    
    shoppingQueueSystem.queue(new Person());
    // The identity is irrelevant for queue simulation 
    

    발각



    [X] 수동

    이것은 시맨틱 냄새입니다.

    모델이 맞는지 아닌지를 확인하려면 모델을 이해해야 합니다.

    태그


  • 오버디자인

  • 결론



    대체 가능한 것을 대체 가능하게 만들고 그 반대도 마찬가지입니다.

    쉬워 보이지만 디자인 기술이 필요하고 우발적인 복잡성을 피해야 합니다.

    학점



    사진 제공: Andrey Metelev on Unsplash

    People think that computer science is the art of geniuses but the actual reality is the opposite, just many people doing things that build on each other, like a wall of mini stones.



    도널드 크누스






    이 기사는 CodeSmell 시리즈의 일부입니다.


    좋은 웹페이지 즐겨찾기