문제

따라서 Winforms C# 솔루션을 재구성하여 해체를 돕고 더 깨끗하고 조직화 할 수 있도록합니다. 이 솔루션은 소규모 비즈니스 주문 등을 추적합니다. .

나는 지금까지 프로젝트를 깨뜨렸다

app.view - 모든 GUI 관련 코드
app.data - 데이터 구조와 인터페이스 만. 다른 구현 코드가 없습니다
App.BusinessLogic - GUI 참조가없는 모든 비즈니스 로직 코드

나는 그들이 어디에 속한 지 알 수없는 수업이 있습니다. 각 수업이 진행될 프로젝트 또는이를 위해 만들어야 할 다른 프로젝트가 있는지 알려주십시오.

  1. 데이터베이스에서 사용자 기본 설정을 검색하는 클래스
  2. 정적 데이터 서버에서 정적 데이터를 검색하고 데이터 결과 세트를 반환하는 클래스.
  3. 사용자 자격을 중단하는 클래스
  4. 해시 가능 주문서를 저장하는 모델 클래스
  5. 사용자 조치에서 메시지를 이메일로 보내는 클래스
도움이 되었습니까?

해결책

사실, 나는 당신이 전통적인 계층 건축물에서 조금 벗어난 것을 가지고 있다고 생각합니다. 일반적으로 응용 프로그램에서 작동하는 데이터 모델은 비즈니스 계층과 함께 작동 할 코드와 함께 유지됩니다. 데이터 계층은 지속성 프레임 워크의 데이터 모델과 해당 프레임 워크와 상호 작용할 코드를 모두 갖추고 있습니다. 나는 이것이 당신의 수업의 제안 된 위치와 당신의 의견에 따라 그것에 대한 당신의 반응 사이의 혼란의 원천일지도 모른다고 생각합니다.

이러한 관점에서 검색하거나 가져 오는 것은 반드시 데이터 계층에 위치합니다. 영구 스토리지에서 데이터에 액세스하고 있습니다. 검색되는 것은 결국 비즈니스 로직이 운영하는 비즈니스 계층 객체로 변환됩니다. 상황은 주문 테이블과 같은 개념적 모델이거나 비즈니스 행동은 비즈니스 계층에 속합니다. 나는 아마도 @adron에 동의 할 것입니다.

더 구체적으로:

  1. 사용자 선호도는 비즈니스 오브젝트이며, 검색하는 것은 데이터 계층 객체입니다.
  2. 정적 데이터는 비즈니스 객체 (테이블 또는보기 등)에 맵핑되며 외부 서버에 액세스하는 것은 데이터 계층 객체입니다.
  3. 사용자 자격은 비즈니스 객체이며,이를 검색하는 것은 데이터 계층 객체입니다.
  4. 주문 테이블은 비즈니스 대상입니다
  5. 이메일은 비즈니스 활동이므로 사람들에게 우송하는 것은 비즈니스 대상입니다.

편집] (간단한) 웹 앱에 대한 일반화 된 3 계층 아키텍처

DataAccessLayer

여기에는 Tableadapter와 Datatables의 행을 Pre-LINQ 프로젝트의 비즈니스 객체로 전환하는 강력하게 타이핑 된 데이터블 및 공장이 포함됩니다. LINQ를 사용하여 여기에는 내 DataContext 및 디자이너 생성 LINQ 엔티티가 포함됩니다.

비즈니스 레이어

여기에는 검증 및 보안을 포함한 모든 비즈니스 로직이 포함됩니다. pre-linq에서는 이들은 내 비즈니스 객체와 응용 프로그램의 논리를 구현하는 다른 클래스입니다. LINQ를 사용하면 LINQ 엔티티의 일부 클래스 구현이 비즈니스 로직을 구현하기 위해 다른 클래스와 함께 보안 및 검증을 구현합니다.

프레젠테이션

이들은 내 웹 양식입니다. 기본적으로 앱의 UI입니다. BL에서도 검증되지만 최적화로 양식에 일부 검증 로직을 포함합니다. 여기에는 모든 사용자 컨트롤이 포함됩니다.

메모: 이것이 논리적 구조입니다. 프로젝트 구조는 일반적으로 이것을 반영하지만, 웹 서비스와의 연결과 같은 일부 사례는 논리적으로 구성 요소가 BL/DAL에 있지만 웹 프로젝트에 직접 포함될 수 있습니다.

메모: ASP.NET MVC가 생산되면 3 층 이상 MVC로 이동하겠습니다. 나는 루비/레일에서 몇 가지 개인 프로젝트를 수행했으며 웹 앱의 MVC 패러다임을 정말 좋아합니다.

다른 팁

App.Data에 데이터 구조 및 인터페이스 만 포함되어야한다고 지정했습니다. 구현 코드가 없어야합니다. 이는 원하는 경우 괜찮지 만 App.BusinessLogic Assembly를 제외하고는 데이터베이스 액세스 코드를 배치 할 수 없습니다.

아마도 App.Data를 App.Model (또는 유사한 것)으로 바꾸고 데이터베이스와 대화하는 새로운 App.DataAccess 어셈블리를 가지고 있어야 할 것입니다 (아마도 저장소 패턴 구현). 그렇게 한 후, 나는 다음과 같이 나눌 것입니다.

  1. App.DataAccess
  2. App.DataAccess
  3. App.DataAccess
  4. App.Model
  5. App.BusinessLogic

나는 아마 함께 갈 것입니다

  1. 데이터
  2. 데이터
  3. 데이터, 수업이 무엇을하고 있는지 확실하지는 않지만
  4. 데이터
  5. 비즈니스
  1. -> app.data
  2. -> app.data
  3. -> app.BusinessLogic 또는 App.Data- 이것이 무엇을 의미하는지 정확히 잘 모르겠습니다.
  4. -> app.businessLogic
  5. -> app.businessLogic
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top