코드 냄새 126 - 가짜 Null 객체
TL;DR: Don't abuse patterns. Even NullObject.
문제
솔루션
문맥
Null 객체 패턴은 and의 훌륭한 대안입니다(둘 다 코드 냄새입니다).
패턴의 구조는 계층 구조를 만들도록 지시합니다.
이것은 꼭 필요한 것은 아닙니다. 실제 객체가 null 객체에 대해 다형성이 되어야 합니다.
상속은 다형성을 달성하는 적절한 방법이 아닙니다.
간단한 해결책은 null 객체처럼 작동하는 실제 객체를 만드는 것입니다.
예: '0'은 숫자의 null 개체입니다.
''(또는 "")는 String의 null 객체입니다.
빈 컬렉션은 컬렉션의 null 개체입니다.
샘플 코드
잘못된
abstract class Address {
public abstract String getCity();
public abstract String getState();
public abstract String getZipCode();
}
//Using inheritance for null objects is a mistake
//We should use interfaces (when available)
public class NullAddress extends Address {
public NullAddress() { }
public String getCity() {
return Constants.EMPTY_STRING;
}
public String getState() {
return Constants.EMPTY_STRING;
}
public String getZipCode() {
return Constants.EMPTY_STRING;
}
}
public class RealAddress extends Address {
private String zipCode;
private String city;
private String state;
public RealAddress(String city, String state, String zipCode) {
this.city = city;
this.state = state;
this.zipCode = zipCode;
}
public String getZipCode() {
return zipCode;
}
public String getCity() {
return city;
}
public String getState() {
return state;
}
}
오른쪽
//There are just "addresses"
public class Address {
private String zipCode;
private String city;
private String state;
public Address(String city, String state, String zipCode) {
//Looks anemic :(
this.city = city;
this.state = state;
this.zipCode = zipCode;
}
public String zipCode() {
return zipCode;
}
public String city() {
return city;
}
public String state() {
return state;
}
}
Address nullAddress = new Address(Constants.EMPTY_STRING, Constants.EMPTY_STRING, Constants.EMPTY_STRING);
//we have our null object
//we should NOT assign it to a singleton, static or global
//It behaves like a null object. That's enough
//No premature optimizations
발각
[X] 수동
이것은 시맨틱 냄새입니다.
태그
잘못된
abstract class Address {
public abstract String getCity();
public abstract String getState();
public abstract String getZipCode();
}
//Using inheritance for null objects is a mistake
//We should use interfaces (when available)
public class NullAddress extends Address {
public NullAddress() { }
public String getCity() {
return Constants.EMPTY_STRING;
}
public String getState() {
return Constants.EMPTY_STRING;
}
public String getZipCode() {
return Constants.EMPTY_STRING;
}
}
public class RealAddress extends Address {
private String zipCode;
private String city;
private String state;
public RealAddress(String city, String state, String zipCode) {
this.city = city;
this.state = state;
this.zipCode = zipCode;
}
public String getZipCode() {
return zipCode;
}
public String getCity() {
return city;
}
public String getState() {
return state;
}
}
오른쪽
//There are just "addresses"
public class Address {
private String zipCode;
private String city;
private String state;
public Address(String city, String state, String zipCode) {
//Looks anemic :(
this.city = city;
this.state = state;
this.zipCode = zipCode;
}
public String zipCode() {
return zipCode;
}
public String city() {
return city;
}
public String state() {
return state;
}
}
Address nullAddress = new Address(Constants.EMPTY_STRING, Constants.EMPTY_STRING, Constants.EMPTY_STRING);
//we have our null object
//we should NOT assign it to a singleton, static or global
//It behaves like a null object. That's enough
//No premature optimizations
발각
[X] 수동
이것은 시맨틱 냄새입니다.
태그
결론
Null 개체 클래스를 만드는 것은 때때로 과도하게 설계됩니다.
실제 개체를 만들어야 합니다.
이 실제 객체는 , , 또는 이어야 합니다.
피해야 할 냄새가 너무 많습니다.
처지
코드 냄새 12 - Null
Maxi Contieri ・ 2020년 10월 31일 ・ 2분 읽기
#codenewbie
#tutorial
#oop
코드 냄새 32 - 싱글톤
Maxi Contieri ・ 2020년 11월 23일 ・ 2분 읽기
#codenewbie
#tutorial
#webdev
#programming
코드 냄새 114 - 빈 클래스
Maxi Contieri ・ 2월 12일 ・ 2분 읽기
#oop
#tutorial
#cleancode
#webdev
코드 냄새 18 — 정적 함수
Maxi Contieri ・ 2020년 11월 6일 ・ 2분 읽기
#codenewbie
#tutorial
#development
#coding
코드 냄새 17 - 전역 함수
Maxi Contieri ・ 11월 5일 '20 ・ 1분 읽기
#codenewbie
#development
#tutorial
더 많은 정보
코드 냄새 12 - Null
Maxi Contieri ・ 2020년 10월 31일 ・ 2분 읽기
#codenewbie
#tutorial
#oop
코드 냄새 32 - 싱글톤
Maxi Contieri ・ 2020년 11월 23일 ・ 2분 읽기
#codenewbie
#tutorial
#webdev
#programming
코드 냄새 114 - 빈 클래스
Maxi Contieri ・ 2월 12일 ・ 2분 읽기
#oop
#tutorial
#cleancode
#webdev
코드 냄새 18 — 정적 함수
Maxi Contieri ・ 2020년 11월 6일 ・ 2분 읽기
#codenewbie
#tutorial
#development
#coding
코드 냄새 17 - 전역 함수
Maxi Contieri ・ 11월 5일 '20 ・ 1분 읽기
#codenewbie
#development
#tutorial
더 많은 정보
학점
사진 제공: Juan Davila on Unsplash
자신의 과정Diseño a la Gorra(스페인어)에서 이 아이디어를 제공한 Hernan Wilkinson에게 감사드립니다.
All models are wrong but some models are useful
조지 박스
소프트웨어 엔지니어링 좋은 인용구
Maxi Contieri ・ 12월 28일 '20 ・ 13분 읽기
#codenewbie
#programming
#quotes
#software
이 기사는 CodeSmell 시리즈의 일부입니다.
코드에서 냄새 나는 부분을 찾는 방법
Maxi Contieri ・ 2021년 5월 21일 ・ 4분 읽기
#codenewbie
#tutorial
#codequality
#beginners
Reference
이 문제에 관하여(코드 냄새 126 - 가짜 Null 객체), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/mcsee/code-smell-126-fake-null-object-508
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
All models are wrong but some models are useful
소프트웨어 엔지니어링 좋은 인용구
Maxi Contieri ・ 12월 28일 '20 ・ 13분 읽기
#codenewbie
#programming
#quotes
#software
코드에서 냄새 나는 부분을 찾는 방법
Maxi Contieri ・ 2021년 5월 21일 ・ 4분 읽기
#codenewbie
#tutorial
#codequality
#beginners
Reference
이 문제에 관하여(코드 냄새 126 - 가짜 Null 객체), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mcsee/code-smell-126-fake-null-object-508텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)