2008-09-05 5 views
7

저는 C# 3.0, wpf 및 .Net 3.5를 배우기 위해 C# 3.0에서 간단한 데스크톱 응용 프로그램을 만들었습니다. 내 응용 프로그램은 본질적으로 csv 파일에서 데이터를 읽고 SQL 서버 CE 데이터베이스에 저장합니다. 나는 sqlmetal을 사용하여 데이터베이스의 ORM 코드를 생성한다. 이 앱의 첫 번째 반복은 지옥처럼 추악하며 리팩토링하는 중입니다.어떻게 C# 3.0의 데스크톱 응용 프로그램을 설계 하시겠습니까?

내 질문에 나를 데려다 준다. 어떻게 C#으로 데스크톱 데이터베이스 응용 프로그램을 설계 하시겠습니까? 모범 사례는 무엇입니까?

sqlmetal 생성 코드를 사용하는 DAL (Database Abstraction Layer)을 만드십니까? 아니면 생성 된 코드로 추상화가 가능한가?

DAL 패턴을 사용하는 경우 싱글 톤 또는 정적 멤버로 설정합니까? View-Model-ModelView 패턴을 DAL 패턴과 함께 사용합니까?

죄송합니다.이 질문이 길게 열린 것처럼 보일 경우 사과하겠습니다.하지만 최근에 이렇게 많이 생각해 보았습니다. C#에서 엔터프라이즈 n 계층 응용 프로그램을 설계하는 방법에 대한 많은 예제가 있지만 독립형 데스크톱 응용 프로그램을 설계하는 데 많은 예제가 없습니다.

답변

4

. 다운로드와 함께 오늘 내 WPF 개발의 대부분을위한 출발점 인 훌륭한 참조 응용 프로그램이 제공됩니다.

DotNetRocks crew은 더 많은 정보를 듣고 싶다면 Glenn BlockBrian Noyes과 인터뷰했습니다.

프리폼은 WinForms의 시절에 익숙하다면 CAB만큼 무겁지 않습니다.

1

아무것도 제작하기 전에 앱 요구 사항을 정의해야합니다.
초보 개발자가 흔히하는 오류입니다. 코드가 어떻게 수행되는지에 앞서 생각하기 시작합니다. 내 충고는 당신이 응용 프로그램의 일부 기능을 설명하려고하는 것입니다. 어떻게 구현되어야하는지 느낄 수 있습니다.

유용한 학습 자료에 대해서는 CompositeWPF을 살펴볼 것을 권장합니다.이 도구는 개발자에게 데스크톱 응용 프로그램 개발 모범 사례를 가르치기 위해 특별히 고안된 프로젝트입니다. 나는 마이크로 소프트의 P & P 팀에서 Composite Application Guidance for WPF (기침 PRISM 기침)로 시작하는 것

2

대답은 "항상 달라집니다"입니다.

몇 가지 사항 : 언제든지이 뚱뚱한 클라이언트 응용 프로그램을 웹 응용 프로그램으로 만들 수 있습니다. 그렇다면 비즈니스 계층 (및 아래)과 프레젠테이션을 구분해야합니다. 가장 간단한 방법은 비즈니스 로직에 대한 모든 호출이 어떤 종류의 인터페이스를 통과하는지 확인하는 것입니다. 더 복잡한 방법은 전체 MVC 설정을 구현하는 것입니다.

고려할 수있는 또 다른 사항은 데이터 액세스 계층을 비즈니스 논리 및 사용자 인터페이스와 독립적으로 만드는 것입니다. 이것은 비즈니스 로직에서 DAL 로의 모든 호출이 "SQL에서이 데이터 가져 오기"또는 "이 SQL 문 실행"보다 "일반적인 데이터 가져 오기"가되어야 함을 의미합니다. 이 방법으로 DAL을 다른 데이터베이스, XML 파일 또는 플랫 파일과 같은 복잡한 파일에 액세스 할 수 있습니다.

간단히 말해서, 우려의 분리.이를 통해 다른 UI를 추가하거나 세 영역을 모두 고유 한 계층으로 세분화하거나 관련 기술을 변경하여 향후 성장할 수 있습니다.

0

그렇습니다. 소규모 응용 프로그램으로 쉽게 구성 될 수 있습니다. 시작하기에 대한 학습 곡선이 있지만 솔직히 WPF를 처음부터 시작하는 것보다 WPF를 더 잘 이해할 수있었습니다. CompositeWPF로 프로젝트를 시작한 후 다른 프로젝트를 시작한 후에는 CompositeWPF의 기능을 필자 혼자서 복제하려고 시도했습니다. :)

1

나는 Jeremy Miller의 Build Your Own Cab 시리즈부터 시작할 것입니다.

저는 초기 CAB 도입 자입니다. 저는 그 기술을 파헤 치고 애플리케이션 아키텍처에 관한 모든 .NET 블로그를 읽음으로써 많은 것을 배웠습니다.

최근에는 새로운 프로젝트를 시작할 기회가 있었고 CAB 대신 StructMap & NHibernate를 사용하고 Jeremy가 사용하는 패턴 중 일부 (특히 이벤트 집계 처리 방법)를 빌렸다. 그 결과는 필요한 모든 작업을 수행 할 수있는 정말 단순화 된 수공 프레임 워크였으며 그 작업을 좋아합니다.

질문의 세부 사항 : 데이터 액세스를 위해 저장소를 사용합니다. 처음에는 ADO.NET 코드를 작성하고 데이터 판독기를 사용하고 객체를 매핑했습니다. 하지만 그 오래된 진짜 빨리, 그래서 나는 NHibernate 잡고 정말 기뻤습니다. 리포지토리는 데이터 액세스를 위해 NHibernate를 사용하며이 특정 앱에서는 데이터 액세스 요구 사항이 매우 간단합니다.

나는 저장소를 사용하는 서비스 계층 (WCF, 이중 채널을 통해 노출됨)이 있습니다. 내 앱은 기본적으로 실시간 업데이트 기능을 갖춘 클라이언트 - 서버입니다 (그리고 나는 당신의 질문이 클라이언트에 관한 것이었지만 동일한 기술과 패턴을 사용할 것입니다). O

n 클라이언트 측 IoC를 위해 StructureMap과 함께 MVP를 사용하고 클래스 간 통신을 위해 매우 간단한 이벤트 집계 전략을 사용합니다. 모든 것에 대한 인터페이스를 코딩합니다. 내가 한 유일한 다른 방법은 CAB에서 동적으로 뷰를 표시하는 유연한 "작업 영역"아이디어를 빌려준 것입니다. 내 자신의 작업 공간 인터페이스를 작성하고 내 자신의 DeckWorkspace 및 TableWorkspace 내 애플 리케이션에 사용하기 위해 구현 (이들은 정말 간단한 일들을 작성했다).

이 가장 최근의 응용 프로그램에서 내 많은 결정은 다른 프레임 워크 및 도구를 사용하여 느낀 경험과 고통의 결과였습니다. 나는 이번에 다른 결정을 내렸다. 어쩌면 응용 프로그램을 구성하는 방법을 실제로 이해하는 유일한 방법은 미리 잘못 수행하는 고통을 느끼는 것입니다.

관련 문제