"비즈니스 로직"이란 무엇입니까?


115

PHP로 시작한 2009 년부터 웹 개발을하고 있습니다. ASP.NET으로 옮길 때이 "비즈니스 로직"과 "비즈니스 규칙"에 중점을 둔 DDD와 OOAD에 대해 많이 들었습니다. 요점은 지금까지 개발 한 모든 앱이 CRUD 작업에 관한 것이며 실제로는 이런 것을 본 적이 없다는 것입니다.

나는 실제로 그 것들이 실제로 무엇을 할 수 있는지 상상할 수 없습니다. 그렇다면이 비즈니스 로직은 무엇이며 이것이 앱에 어떻게 적용됩니까? 나는 이것이 도메인 모델에서 메소드로 구현된다는 것을 알고 있지만, 그 메소드는 무엇이며 응용 프로그램에서 어디에서 사용할 수 있습니까?

답변:


107

CRUD 는 Create, Read, Update 및 Delete의 약자입니다. 이것들은 데이터베이스 튜플 에서 수행 할 수있는 네 가지 기본 작업입니다 . 그러나 데이터베이스 레코드를 작성, 읽기, 업데이트 및 삭제하는 것보다 비즈니스 애플리케이션에 항상 더 많은 것이 있습니다.

몇 가지 기본 정의로 시작한 다음 몇 가지 예를 살펴보고 해당 정의가 예제에 어떻게 매핑되는지 그리고 실제 소프트웨어에 어떻게 매핑되는지 봅시다.

비즈니스 로직 또는 도메인 논리는 프로그램의 일부 실제 비즈니스 규칙 인코딩 데이터를 생성, 저장, 변경 될 수있는 방법을 결정합니다. 비즈니스 오브젝트가 서로 상호 작용하는 방법을 규정하고 비즈니스 오브젝트가 액세스되고 업데이트되는 경로 및 방법을 시행합니다.

비즈니스 규칙 은 조직에 적용되는 작업, 정의 및 제약 조건을 설명합니다. 작업은 집합 적으로 프로세스를 형성합니다 . 모든 비즈니스는 이러한 프로세스를 사용하여 작업을 수행하는 시스템 을 구성 합니다.

이제 몇 가지 예를 살펴 보겠습니다.

한 계좌에서 다른 계좌로 송금

먼저 알아야 할 사항 (입력)은 무엇입니까?

  • 양도하는 사람의 신원
  • 양도 할 금액
  • 소스 확인 계좌 번호
  • 대상 확인 계좌 번호

적용해야 할 "비즈니스 규칙"에는 어떤 것이 있습니까?

  • 요청하는 사람은 그렇게 할 권한이 있어야합니다.
  • 트랜잭션은 atomic 이어야합니다 .
  • 거래가 일정 금액을 초과하는 경우 정부에보고 요구 사항이있을 수 있습니다.

"원자"는 거래가 완전히 성공하거나 완전히 실패해야 함을 의미합니다. 한 계좌에서 돈을 인출하거나 다른 계좌로 입금하지 않거나 (돈이 사라짐) 계좌에 입금되었지만 다른 계좌에서 인출되지 않는 계좌 거래는 할 수 없습니다.

아마존에서 무언가를 주문.

무엇을 알아야합니까?

  • 주문한 사람의 신원
  • 배송 정보
  • 청구 정보
  • 지불 방법
  • 선적 할 각 품목의 수량 및 수량
  • 배송 방법 (야간, 느린 보트 또는 슈퍼 세이버)
  • 주 세율

주문 후 어떻게됩니까?

  • 재고에서 품목을 가져옴
  • 반면에 수량은 차감됩니다.
  • 선적을 위해 포장 된 품목
  • 품절 품목이 이월 주문 됨
  • 최소 수량 이하로 떨어지는 품목은 주문됩니다
  • 하나 또는 두 개의 선적?
  • 송장 / 배송 목록이 인쇄되고 주문과 함께 배치됩니다.

    ..기타.


5
나는 정의를 좋아하지만 예제에서 비즈니스 로직과 비즈니스 규칙 사이의 차이점을 놓치고 있습니다.
jdv-Jan de Vaan

1
승인. 그러나 왜 "트랜잭션은 원 자성이어야합니다"라는 레이블을 비즈니스 규칙으로 표시합니까? 나는 비즈니스 규칙에 대해 약간 낮은 수준으로 들립니다.
jdv-Jan de Vaan

9
@jdv : 당신은 이것을 너무 생각하고 있습니다. 텔러 가 해당 거래의 절반 만 수행 합니까?
Robert Harvey

1
@jdv : 트랜잭션이 원자 적이어야 함을 말하는 것은 다음 두 가지를 의미합니다. (1) 트랜잭션 처리를 방해하는 트랜잭션이 발생하지 않은 것처럼 트랜잭션의 영향을 취소 할 수 있습니다 (예를 들어, 오류 로그 보고서 작성) 또는 수행해야 할 모든 것을 완료하십시오. (2) 거래의 어떤 부분도 해당 계정과 관련된 다른 "원자"거래와 겹치지 않습니다. 예를 들어, 두 계좌 각각에 $ 1,000,000를 가진 사람이 은행에 요청하는 순간에 $ 50
만을

4
@jdv 트랜잭션은 원 자성이어야하며, 최종 상태와 관련이 있어야합니다.
icarus74

27

CRUD는 단순히 응용 프로그램이 수행하는 만들기, 읽기, 업데이트, 삭제입니다.

버그 추적기는 어느 정도 CRUD 앱이기도합니다. 버그 생성, 버그 읽기 (표시), 버그 업데이트 및 삭제

그러나 CRUD보다 버그 추적기가 더 많습니다.

  • 개발자는 버그를 확인 또는 폐쇄 된 것으로 표시 할 수 없습니다. 이는 QA 업무의 일부입니다. 따라서 QA 역할이없는 사람이 버그를 비공개 또는 인증 된 것으로 표시 할 수 없도록하기 위해 일부 코드가 있습니다.
  • 프로젝트 관리자 외에는 실제로 버그를 삭제할 수 없습니다 .
  • 버그가 "test me"로 표시 되려면 버그에 대해 최소한 하나의 코드 커밋이 있어야합니다.
  • '닫힌'상태 인 버그만 '열린'상태로 이동할 수 있습니다.
  • 버그에 할당 된 개발자는 버그를 '코드 검토'에서 '코드 검토 완료'로 옮길 수 없습니다
  • QA 및 개발자는 자신이 할당 된 프로젝트의 버그만 볼 수 있습니다.

위를 구현하는 코드는 응용 프로그램의 비즈니스 논리입니다.

워크 플로우의 제한 또는 CRUD에서 다양한 작업을 수행 할 수있는 사람 . 이것들은 하나의 CRUD 앱과 다른 CRUD 앱을 분리하는 것입니다. 그들은 당신이 실제로 말을 사업하는 데 필요한 부분입니다 어떻게 응용 프로그램이 작동이. 그것이 얼마나 논리적인가 ... 글쎄, 그것은 프로젝트 관리자의 귀에서 맥주에 대해 가장 잘 논의되었습니다. 그러나 이것이 바로 비즈니스 로직입니다.

물론, 역할이없는 '순수한'CRUD 앱을 작성할 수 있으며 모든 것을 수정하고 볼 수 있습니다. 그러나 이는 규칙이 아닌 예외입니다.

비즈니스 로직 은 제공된 비즈니스 규칙을 처리하기 위해 프로그램에 작성하는 로직입니다.


비즈니스 규칙을 시작할 때 이것은 크루 드 자체 나 비즈니스 로직보다 높은 수준에있는 경향이 있습니다. 이것은 비즈니스와 함께 일하는 비즈니스 분석가에게서 얻는 것입니다.

이 예에서는 상점의 반품 데스크에서 품목 반품을 처리하는 방법을 결정하는 프로그램을 고려하십시오.

  • 영수증이 90 일 이상인 경우 매장 크레딧 만 제공 할 수 있습니다.
  • 영수증이 90 일 미만인 경우 영수증을 사용하여 구입 한 입찰에 신용을 부여합니다 (신용 카드로 신용이 돌아가고 현금이 현금으로 돌아가고 상점 신용이 상점 신용으로 돌아갑니다). 수표로 현금을 사용했습니다.

이것들은 몇 가지 비즈니스 규칙입니다. 그들은 응용 프로그램의 CRUD 부분과 대화하지 않습니다.

비즈니스 규칙으로 작업 할 때 시스템에서 원시 코드를 작성하는 대신 규칙 엔진 (예 : Windows Workflow Foundation Rules Engine )으로 작성된 규칙을 찾을 수 있습니다.


논리 / 규칙의 구별은 용어 중 하나이며 밤새도록 논쟁 할 수 있음을 인식하십시오 (맥주를 다시 마시는 것이 가장 좋습니다). 이것은 드문 차이점이 아니지만 두 가지가 서로 섞일 수 있습니다.


23

다른 답변이 맞습니다. 하나 더 생각…

휴대용 비즈니스 로직

Turbo Pascal 에서 Java로 전환하는 등 다른 프로그래밍 언어로 소프트웨어 프로젝트다시 구현하려는 경우 비즈니스 로직비즈니스 규칙 은 기존 프로젝트와 새 프로젝트의 공통점 입니다.

프로그래밍 언어는 다른 것입니다. 소스 코드가 완전히 다른 것입니다. 도구 ( IDE , 컴파일러 등)는 완전히 다를 수 있습니다. 사용자 인터페이스는 완전히 다시 구성하거나 다른이 될 수 있습니다 모양과 느낌을 . 문서는 아마 다를 것이다. 그러나 수행 된 작업 / 목표 달성의 최종 결과 인 두 프로젝트의 목적은 동일합니다.


10

비즈니스 로직은 기본적으로 유효성과 흐름의 두 가지 범주로 구성됩니다. 비즈니스 로직에 따르면 수량 1은 수량 2보다 크거나 같아야합니다. 예를 들어 구매할 품목 수는 재고 품목 수보다 적거나 같아야합니다.

한 응용 프로그램에서 비즈니스 사람들은 이것이 비즈니스 규칙이라고 말하므로이 비즈니스 논리 (유효성)를 시행하는 코드를 작성합니다. 다른 응용 프로그램은 주문한 품목의 수가 재고 품목의 수보다 많으면 주문을 수락 한 다음 차이에 대해 20 %를 더한 주문을하기 위해이 비즈니스 로직을 작성한다고 말합니다 (흐름) .

CRUD는 단순히 스토리지에 데이터를 가져오고 내보내는 것입니다. 비즈니스 로직은 해당 데이터로 수행 할 작업과 수행 할 수있는 변환을 결정합니다. 고객이 향후 5 세 미만의 특정 지역 (지역 / 방문자 할인)에서 태어 났습니까? CRUD는 간단합니다. 자녀가 6 개월을 넘지 않은 해에 반년 이상 생존 한 경우에만 자녀 세금 공제를받을 수 있다는 점을 알고 있으면 더 복잡합니다.


9

비즈니스 로직 또는 규칙은 사용자 인터페이스의 메커니즘 ( "프로그래밍 항목")과 관련 이없는 것입니다 . 이 거래 또는 100 년 전 (수동으로) 수행 한 경우에도 적용해야 할 사항입니다. 예를 들어, 구매에 판매 세를 적용 할시기입니다.


1

프로그램이나 응용 프로그램의 "비즈니스 로직"은 실제로 입력 (사용자, 운영 체제 등)을 통해 작업을 수행하는 코드의 일부입니다. 응용 프로그램의 "비즈니스 규칙"은 일반적으로 프로그램 자체의 정의 된 매개 변수입니다 (예 : 입력 처리 방법). 적어도 이것이 많은 사람들로부터 언급 된 이야기입니다. 코드의 일부를 설명하는 용어와 거의 비슷합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.