Code Smell 134 - 전문 비즈니스 컬렉션
TL;DR: Don't create unnecessary abstractions
문제
솔루션
문맥
에서 추상화를 발견하는 것은 어려운 작업입니다.
다듬은 후에는 불필요한 추상화를 제거해야 합니다.
샘플 코드
잘못된
<?php
Namespace Spelling;
final class Dictionary {
private $words;
function __construct(array $words) {
$this->words = $words;
}
function wordsCount(): int {
return count($this->words);
}
function includesWord(string $subjectToSearch): bool {
return in_array($subjectToSearch, $this->words);
}
}
//This has protocol similar to an abstract datatype dictionary
//And the tests
use PHPUnit\Framework\TestCase;
final class DictionaryTest extends TestCase {
public function test01EmptyDictionaryHasNoWords() {
$dictionary = new Dictionary([]);
$this->assertEquals(0, $dictionary->wordsCount());
}
public function test02SingleDictionaryReturns1AsCount() {
$dictionary = new Dictionary(['happy']);
$this->assertEquals(1, $dictionary->wordsCount());
}
public function test03DictionaryDoesNotIncludeWord() {
$dictionary = new Dictionary(['happy']);
$this->assertFalse($dictionary->includesWord('sadly'));
}
public function test04DictionaryIncludesWord() {
$dictionary = new Dictionary(['happy']);
$this->assertTrue($dictionary->includesWord('happy'));
}
}
오른쪽
<?php
Namespace Spelling;
// final class Dictionary is no longer needed
//The tests use a standard class
//In PHP we use associative arrays
//Java an other languages have HashTables, Dictionaries etc. etc.
use PHPUnit\Framework\TestCase;
final class DictionaryTest extends TestCase {
public function test01EmptyDictionaryHasNoWords() {
$dictionary = [];
$this->assertEquals(0, count($dictionary));
}
public function test02SingleDictionaryReturns1AsCount() {
$dictionary = ['happy'];
$this->assertEquals(1, count($dictionary));
}
public function test03DictionaryDoesNotIncludeWord() {
$dictionary = ['happy'];
$this->assertFalse(in_array('sadly', $dictionary));
}
public function test04DictionaryIncludesWord() {
$dictionary = ['happy'];
$this->assertTrue(in_array('happy', $dictionary));
}
}
발각
[X] 반자동
프로토콜에 따라 불필요한 클래스를 제거해야 합니다.
태그
잘못된
<?php
Namespace Spelling;
final class Dictionary {
private $words;
function __construct(array $words) {
$this->words = $words;
}
function wordsCount(): int {
return count($this->words);
}
function includesWord(string $subjectToSearch): bool {
return in_array($subjectToSearch, $this->words);
}
}
//This has protocol similar to an abstract datatype dictionary
//And the tests
use PHPUnit\Framework\TestCase;
final class DictionaryTest extends TestCase {
public function test01EmptyDictionaryHasNoWords() {
$dictionary = new Dictionary([]);
$this->assertEquals(0, $dictionary->wordsCount());
}
public function test02SingleDictionaryReturns1AsCount() {
$dictionary = new Dictionary(['happy']);
$this->assertEquals(1, $dictionary->wordsCount());
}
public function test03DictionaryDoesNotIncludeWord() {
$dictionary = new Dictionary(['happy']);
$this->assertFalse($dictionary->includesWord('sadly'));
}
public function test04DictionaryIncludesWord() {
$dictionary = new Dictionary(['happy']);
$this->assertTrue($dictionary->includesWord('happy'));
}
}
오른쪽
<?php
Namespace Spelling;
// final class Dictionary is no longer needed
//The tests use a standard class
//In PHP we use associative arrays
//Java an other languages have HashTables, Dictionaries etc. etc.
use PHPUnit\Framework\TestCase;
final class DictionaryTest extends TestCase {
public function test01EmptyDictionaryHasNoWords() {
$dictionary = [];
$this->assertEquals(0, count($dictionary));
}
public function test02SingleDictionaryReturns1AsCount() {
$dictionary = ['happy'];
$this->assertEquals(1, count($dictionary));
}
public function test03DictionaryDoesNotIncludeWord() {
$dictionary = ['happy'];
$this->assertFalse(in_array('sadly', $dictionary));
}
public function test04DictionaryIncludesWord() {
$dictionary = ['happy'];
$this->assertTrue(in_array('happy', $dictionary));
}
}
발각
[X] 반자동
프로토콜에 따라 불필요한 클래스를 제거해야 합니다.
태그
예외
충분한 강력한 증거가 있는 경우 성능상의 이유로 컬렉션을 최적화해야 하는 경우가 있습니다.
결론
때때로 코드를 정리해야 합니다.
전문 컬렉션은 좋은 출발점입니다.
처지
코드 냄새 111 - 순회하는 동안 컬렉션 수정
Maxi Contieri ・ 2021년 12월 19일 ・ 2분 읽기
#oop
#programming
#cleancode
#codesmell
더 많은 정보
때때로 코드를 정리해야 합니다.
전문 컬렉션은 좋은 출발점입니다.
처지
코드 냄새 111 - 순회하는 동안 컬렉션 수정
Maxi Contieri ・ 2021년 12월 19일 ・ 2분 읽기
#oop
#programming
#cleancode
#codesmell
더 많은 정보
코드 냄새 111 - 순회하는 동안 컬렉션 수정
Maxi Contieri ・ 2021년 12월 19일 ・ 2분 읽기
#oop
#programming
#cleancode
#codesmell
학점
Unsplash의 Pisit Heng 님의 사진
Most of the effort in the software business goes into the maintenance of code that already exists.
비에체 베네마
소프트웨어 엔지니어링 좋은 인용구
Maxi Contieri ・ 12월 28일 '20 ・ 13분 읽기
#codenewbie
#programming
#quotes
#software
이 기사는 CodeSmell 시리즈의 일부입니다.
코드에서 냄새 나는 부분을 찾는 방법
Maxi Contieri ・ 2021년 5월 21일 ・ 4분 읽기
#codenewbie
#tutorial
#codequality
#beginners
Reference
이 문제에 관하여(Code Smell 134 - 전문 비즈니스 컬렉션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/mcsee/code-smell-134-specialized-business-collections-2bm8
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Most of the effort in the software business goes into the maintenance of code that already exists.
소프트웨어 엔지니어링 좋은 인용구
Maxi Contieri ・ 12월 28일 '20 ・ 13분 읽기
#codenewbie
#programming
#quotes
#software
코드에서 냄새 나는 부분을 찾는 방법
Maxi Contieri ・ 2021년 5월 21일 ・ 4분 읽기
#codenewbie
#tutorial
#codequality
#beginners
Reference
이 문제에 관하여(Code Smell 134 - 전문 비즈니스 컬렉션), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mcsee/code-smell-134-specialized-business-collections-2bm8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)