Q&A

CMS/프레임워크 Rhymix 2.1
개발 언어 PHP 8.4

안녕하세요.

 

DocumentModel::getDocument을 쓰던 중 이상한 점을 발견하여 문의합니다.

 

스킨에서 $targetDocument = DocumentModel::getDocument($val->target_srl, false, false); 이런식으로 쓰고 있었습니다.

 

DocumentItem 에서 캐시되고 있는 줄 알고 있었는데 debug패널을 보니 'readed_count', 'voted_count', 'blamed_count', 'comment_count', 'trackback_count'를 db에서 따로 조회하고 있더라구요. 

 

그래서 필요한 컬럼인 'category_srl', 'title' 만 조회하려고 $targetDocument = DocumentModel::getDocument($val->target_srl, false, false, ['category_srl', 'title']) 로 쓸 수 있나 코어를 살펴봤는데, DocumentItem 클래스에서 __construct에서 $columnList를 잘 넘겨받은 이후 _loadFromDB()에서는 $this->columnList = array();로 초기화 되더군요. 그 다음 $columnList = array('readed_count', 'voted_count', 'blamed_count', 'comment_count', 'trackback_count'); 으로 덮어씌워 집니다. 

 

제 생각에 원래 $columnList 의도는 필요한 컬럼만 조회할 수 있도록 하고 위에 나열한 컬럼들은 수시로 변하니깐 이것들이 포함되면  쿼리하는 것이 맞는 것 같은데, 혹시 다른 용도가 있나요?

 

ehii Lv. 2

댓글 3

  • DocumentModel()에서 $columnList는 false일 때를 제외하면 아무 의미 없습니다. 그때그때 다른 컬럼을 불러오려고 하면 오히려 캐시 효율이 떨어지고, 똑같은 DocumentItem 클래스의 인스턴스인데 언제 어디서 어떤 파라미터를 넣어서 불러왔는지에 따라 속성이 달라진다면 OOP의 원칙에도 어긋나기 때문에, 이런 무리한 최적화 시도는 상큼하게 무시합니다.

     

    만약 이 메소드를 리팩토링하게 된다면 $document_srl 파라미터 하나만 남겨둘 것 같네요.

  • @기진곰

    상세한 답변 감사드립니다. 이유까지 친절하게 설명해주셨네요. 별 의미없는 인자였군요.ㅎㅎ 초보가 코드를 짜려다 보니 코어에 있는 메소드들은 뭔가 다 의미가 있어 보입니다. $columnList = array()로 되어 있으니 뭔가가 더 있는 줄 알고 한참 검색했네요. AI는 헛소리만 해대고;; 

  • @ehii

    네, 혼란을 일으키기만 하는 오래된 변수들은 deprecated 딱지라도 붙여야겠습니다.