애플리케이션에서 '비즈니스 로직'은 정확히 무엇으로 구성되어 있나요?

StackOverflow https://stackoverflow.com/questions/39288

  •  09-06-2019
  •  | 
  •  

문제

나는 '비즈니스 로직을 다른 코드와 혼합해서는 안 된다'거나 이와 유사한 진술을 여러 번 들었습니다.제가 작성하는 모든 단일 코드(처리 단계를 의미함)는 비즈니스 요구 사항과 관련된 논리로 구성되어 있다고 생각합니다.

비즈니스 로직이 정확히 무엇인지 말해 줄 수 있는 사람이 있나요?다른 코드와 어떻게 구별할 수 있나요?무엇이 비즈니스 로직이고 무엇이 아닌지를 결정하는 간단한 테스트가 있습니까?

도움이 되었습니까?

해결책

당신이 하고 있는 일을 일반 영어로 간단히 정의해보세요."사람들을 고통스럽게 만들다", "돈을 훔치다", "지구의 이 부분을 파괴하다"와 같이 비즈니스적으로 말하는 것은 비즈니스 계층에 대해 말하는 것입니다.명확하게 말하면, 당신을 흥분시키는 것들이 여기에 있습니다.

"여기에 표시하세요", "저것을 표시하지 마세요", "더 아름답게 만드세요"라고 말하는 것은 프레젠테이션 레이어에 대해 말하는 것입니다.이것이 디자이너를 흥분하게 만드는 것들입니다.

"저장", "데이터베이스에서 가져오기", "업데이트", "삭제" 등과 같은 말을 할 때당신은 데이터 계층에 대해 이야기하고 있습니다.어떤 대가를 치르더라도 영원히 간직해야 할 것이 무엇인지 알려 주는 것입니다.

다른 팁

아마도 무엇을 말하는 것부터 시작하는 것이 더 쉬울 것입니다. 그렇지 않다 비즈니스 논리.데이터베이스 또는 디스크 액세스는 비즈니스 논리가 아닙니다.UI는 비즈니스 로직이 아닙니다.네트워크 통신은 비즈니스 논리가 아닙니다.

나에게 비즈니스 로직은 소프트웨어 아키텍처가 작동하는 방식이 아니라 비즈니스가 작동하는 방식을 설명하는 규칙입니다.비즈니스 로직도 변화하는 경향이 있습니다.예를 들어, 모든 고객이 자신의 계정과 연결된 단일 신용 카드를 갖는 것이 비즈니스 요구 사항일 수 있습니다.이 요구 사항은 고객이 여러 개의 신용 카드를 보유할 수 있도록 변경될 수 있습니다.이론적으로 이는 단지 비즈니스 로직의 변경일 뿐이며 소프트웨어의 다른 부분은 영향을 받지 않습니다.

그래서 그것은 이론입니다.현실 세계에서(당신이 발견한 바와 같이) 비즈니스 로직은 소프트웨어 전체에 퍼지는 경향이 있습니다.위의 예에서는 추가 신용 카드 데이터를 보관하기 위해 데이터베이스에 다른 테이블을 추가해야 할 수도 있습니다.UI를 반드시 바꿔야 합니다.

순수주의자들은 비즈니스 논리가 항상 완전히 분리되어야 하며 데이터베이스에 "고객" 또는 "계정"이라는 테이블을 두는 것조차 반대한다고 말합니다.극단적으로 생각하면 믿을 수 없을 정도로 일반적이고 유지 관리가 불가능한 시스템이 될 것입니다.

대부분의 비즈니스 논리를 시스템 전체에 번지는 것보다 함께 유지해야 한다는 강력한 주장이 있지만 (대부분의 이론과 마찬가지로) 현실 세계에서는 실용적이어야 합니다.

귀하의 애플리케이션 요구 사항과 비즈니스 논리를 혼동하신 것 같습니다.그것은 같은 것이 아닙니다.누군가 자신의 비즈니스 논리를 설명하면 다음과 같습니다.

"사용자가 상품을 구매할 때 배송 정보를 제공해야 합니다.정보는 x y z 규칙으로 검증됩니다.그 후 그는 송장을 받고 포인트를 적립하게 되며, 이는 y 제안에 대해 x% 할인을 제공합니다."(나쁜 예를 들어 죄송합니다.)

이 비즈니스 규칙을 구현할 때 정보 표시 방법, 정보가 지속적으로 저장되는 방법, 애플리케이션 서버와의 통신, 사용자가 송장을 받는 방법 등과 같은 부차적인 요구 사항을 생각해야 합니다.이 모든 요구 사항은 비즈니스 논리의 일부가 아니므로 분리되어야 합니다.이렇게 하면 비즈니스 규칙이 변경될 때 더 적은 노력으로 코드를 조정할 수 있습니다.그것은 사실입니다.

때때로 프레젠테이션은 주로 사용자 입력의 유효성을 검사할 때 일부 비즈니스 논리를 복제합니다.그러나 이는 비즈니스 논리 계층에도 존재해야 합니다.다른 상황에서는 성능 문제로 인해 일부 비즈니스 로직을 데이터베이스로 이동해야 합니다.마틴 파울러(Martin Fowler)가 이에 대해 논의했습니다. 여기.

한 줄로 단순화하려면 ...
비즈니스 로직은 특정 UI/구현 세부 사항에 의존하지 않거나 변경되지 않는 코드입니다.규칙, 프로세스 등을 코드로 표현한 것입니다.모델링되는 비즈니스에 의해 정의되거나 반영됩니다.

나는 레이어의 BLL+DAL 이름을 좋아하지 않습니다. 명확하게 하기보다 더 혼란스럽기 때문입니다.
이를 DataServices 및 DataPersistence라고 부릅니다.이렇게 하면 더 쉬워질 것입니다.

서비스 조작, 지속성 계층 CRUD(생성, 읽기, 업데이트, 삭제)

나를 위한, " 비즈니스 로직 "는 문제 영역에 적용 가능한 데이터를 나타내는 모든 엔터티와 "데이터로 무엇을 할지"를 결정하는 논리를 구성합니다.

따라서 실제로는 "데이터 전송"(액세스가 아님)과 "데이터 조작"으로 구성되어야 합니다.실제로 데이터 액세스(DB에 닿는 항목)는 프레젠테이션 코드와 마찬가지로 다른 계층에 있어야 합니다.

양식, 버튼 등과 같은 내용이 포함되어 있는 경우.그것은 비즈니스 로직이 아니라 프리젠테이션 레이어입니다.파일이나 데이터베이스에 대한 지속성이 포함되어 있으면 DAL입니다.그 사이의 모든 것은 비즈니스 로직입니다.실제로 UI가 아닌 모든 것을 "비즈니스 로직"이라고 부르기도 하지만 이는 관리가 아닌 문제 영역과 관련된 것이어야 합니다.

비즈니스 로직은 순수한 추상화이며, 사용자 앞에 있는 데이터의 구체화/시각화 및 기본 데이터의 지속성과 독립적으로 존재합니다.

예를 들어, 세금 준비 소프트웨어에서 비즈니스 로직 클래스의 책임 중 하나는 납부할 세금을 계산하는 것입니다.그들은 보고서를 표시하거나 세금 신고서를 저장하고 검색할 책임이 없습니다.


@Lars, "서비스"는 특정 아키텍처를 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top