두 개발자 사이에 다소 화제가 된 응용 프로그램이 있습니다.
기본적으로 웹 레이어와 백엔드 레이어로 나뉩니다. 웹 계층은 간단한 웹 양식으로 정보를 수집하고이 데이터를 JSON 문서 (문자 그대로 .json 파일)로 백엔드에서 사용하는 감시 폴더에 저장합니다. 백엔드는 몇 초마다이 폴더를 폴링하고 파일을 가져 와서 기능을 수행합니다.
파일 자체는 매우 간단합니다 (예 : 모든 문자열 데이터, 중첩 없음). 백엔드 처리 단계는 메시지 당 약 10 분이 걸립니다.
관계형 데이터베이스 (MySQL), noSQL 데이터베이스 (Redis) 또는 일반 REST API 호출과 같은 것을 대신 사용해야하는 경우 한 개발자가 파일 시스템을 메시징 계층으로 사용하는 것이 나쁜 해결책이라고 제안 할 때이 주장이 제기됩니다.
Redis는 대기중인 메시지 처리를 위해 조직 내 다른 곳에서 사용됩니다.
내가 들었던 주장은 다음과 같이 분류됩니다.
플랫 파일에 찬성하여 :
플랫 파일은 파일을 "감시"폴더에서 가져온 후 "처리 중"폴더로, 마지막으로 완료되면 "완료"폴더로만 이동하기 때문에 다른 솔루션보다 더 안정적입니다. 매우 낮은 수준의 버그를 제외하고 메시지가 사라질 위험이 전혀 없습니다.
플랫 파일은 이해하기 위해 기술적 정교함이 덜 필요
cat
합니다. 쓸 쿼리가 없으며, 실수로 큐에서 메시지를 튀어 나와 영원히 사라질 위험이 없습니다.파일 관리 코드는 모든 언어 표준 라이브러리의 일부이므로 프로그래밍 측면에서 데이터베이스 API보다 간단합니다. 이렇게하면 코드베이스의 전체 복잡성과 가져와야하는 타사 코드의 양이 줄어 듭니다.
YAGNI 원리 플랫 파일 지금 잘 작동하는지 상태, 아니 그래서 그것을두고, 더 복잡한 솔루션을 변경 필요성이 입증되지 것.
데이터베이스를 선호하는 경우 :
파일로 가득 찬 디렉토리보다 데이터베이스를 확장하는 것이 더 쉽습니다.
플랫 파일은 누군가 "완료"파일을 "감시"디렉토리로 다시 복사 할 위험이 있습니다. 이 응용 프로그램 (가상 시스템 관리)의 특성으로 인해 심각한 데이터 손실이 발생할 수 있습니다.
T / S에 더 많은 기술적 정교함이 필요하다는 것은 앱을 교육받지 않은 직원이 물건을 찌르는 것만으로 무언가를 망칠 가능성이 적다는 것을 의미합니다.
특히 Redis와 같은 DB 연결 코드는 표준 라이브러리 파일 관리 기능만큼 강력합니다.
DB 연결 코드는 파일 조작보다 수준이 높기 때문에 개발자의 관점에서 볼 때 (기능적 으로 는 아니더라도) 훨씬 간단합니다.
내가 볼 수 있듯이 두 개발자 모두 유효한 포인트가 많습니다.
따라서이 두 사람 (프로 파일 개발자 또는 프로 데이터베이스 개발자) 중 소프트웨어 엔지니어링 모범 사례와 더 일치하는 이유는 무엇입니까?