2011-05-03 3 views
1

Objective-C 및 Xcode 4를 사용하여 Mac OS X 응용 프로그램을 개발 중이며 CoreData를 사용하지 않고도 데이터 액세스를 처리하고 비즈니스 논리 작업을 수행하는 가장 좋은 방법을 찾고 싶습니다.Mac OS X 응용 프로그램에서 DAL 및 BLL 레이어를 사용할 수 있습니까?

저는 .NET MVC 배경에서 왔으며 일반적으로 내 컨트롤러에 내 뷰에 매핑 할 수있는 데이터를 반환하기 위해 리포지토리 패턴을 사용하여 서비스 레이어를 호출합니다. 이는 전통적인 비즈니스 로직 및 데이터 액세스 레이어와 비슷한 방식으로 작동합니다.

그러나 Mac에서 필자의 대부분의 연구 결과는 내 모델과 컨트롤러가 모델을 데이터로 채우고 비즈니스 및 유효성 검사 논리를 수행하는 책임을 공유해야 함을 나타냅니다.

다른 모델에서 일부 데이터 액세스/비즈니스 로직 작업을 반복해야하므로 동일한 코드 비트를 다시 작성해야하기 때문에 약간 제한적이며 DRY 원칙에 위배됩니다.

따라서 모든 컨트롤러에서 호출 할 수있는 비즈니스/데이터 액세스 논리 (SQLite 데이터베이스)를 수행하는 클래스 또는 외부 라이브러리 세트를 사용할 수 있습니까? 따라서 모델에는 자체 및 검증 로직에 대한 데이터 만 포함됩니다. 아니면 이것이 핵심 MVC 원칙과 Mac에서 응용 프로그램을 빌드하는 방법에 어긋나는 것입니까?

답변

1

이 시나리오에서 핵심 데이터를 사용하지 않는 특별한 이유가 있습니까? 로컬 파일 시스템에서 객체를 유지하는 데 매우 최적화되어 있습니다. 또한 모델 수준에서 유효성 검사, 결과 캐싱, 알림 등을 수행합니다.

+0

사실 내 배경은 .NET을 사용하여 데이터베이스를 사용하여 시스템을 구축하고 다중 계층 응용 프로그램을 구축하는 것이 아닙니다. 이미이 작업을 수행하는 방법을 이미 알고 있으며 이미 빡빡한 프로젝트 마감 시간을 연장 할 새로운 객체 그래프 프레임 워크를 배우지 않고 Cocoa에 적용하기를 원합니다. 나는 처음 개발을 시작할 때 이것을 살펴 봤지만 내가 원했던 것에 대한 좋은 튜토리얼을 찾을 수 없었다. 즉 모델 등에서 CRUD 작업을 시연 해 주셔서 감사합니다. – Cragly

+0

CoreData를 다시 한 번 살펴 보시기 바랍니다. 시간이 오래 걸리기 때문에 직접 작성해야합니다. 그것을 사용하는 것이 이치에 맞지 않는 몇 가지 시나리오가 있습니다. –

+0

주위를 잘 돌아 다니며 CoreData를 사용하기로 결정했습니다. 당신이 그것의 높게 낙천적 인 말하고 처음 가파른 학습 곡선 후에 잘 그것의 값이있는 그것. – Cragly

0

당신이 묘사 한 것이 나에게 좋은 생각 인 것 같습니다. 유효성 검사 및 비즈니스 논리를 모델 클래스에 넣는 것은 MVC를 적절하게 사용하는 것이며 sqlite 데이터베이스에 데이터를 저장하는 것 (모델 클래스에서 이야기하는 방식)도 일반적으로 사용되는 방법입니다.

우리는 같은 페이지를 사용하고 있는지 확실하지 않습니다. 디자인을 사용하면 모든 컨트롤러에서 호출 할 수있는 비즈니스/데이터 액세스 논리 (sqlite 데이터베이스)를 수행합니다. "사실 모델 클래스가됩니다.

+0

모델 클래스에 모든 것이 저장되어있는 것처럼 문제가 있습니다. 데이터베이스의 항목 모음 즉 사용자 목록을 얻는 방법에 대해 어떻게 생각합니까? 기준에 따라 데이터베이스에서 사용자 목록을 얻으려면 User 모델 클래스가 올바르지 않은 것처럼 보일까요? 그러나이 기능이 모델 클래스에 속하지 않고 컨트롤러에 속해 있다면 사용자 목록을 얻고 자하는 다른 컨트롤러에 코드 복제가 가능할 수 있습니다. 희망이 의미가 있습니다. – Cragly

+1

싱글 톤처럼 취급하면서 페칭을위한 단일 클래스를 가질 수 있습니다. 컨트롤러 (컨트롤러)에서이를 사용하려면 일부 매개 변수를 입력하고 여러 모델 객체를 반환합니다. 따라서 사용자를 가져와야하는 컨트롤러는 그 싱글 톤과 대화 할 수 있기 때문에 코드 중복이 없습니다. 또는, 데이터를 가져와 User 객체를 만들고 인스턴스화하는 User 클래스의 클래스 메서드 (인스턴스 메서드와 반대)를 만듭니다. 이 두 접근법은 Apple API에서 찾을 수 있습니다. –

관련 문제