2013-09-06 3 views
0

이전 프로젝트를보고 있었는데 특정 레이어가 여러 레이어에서 호출되지 않도록 숨기는 방법에 대한 제안이 있는지 알고 싶었습니다. 이 3 계층 프로젝트, 웹 응용 프로그램 -> 웹 서비스 -> 데이터베이스프로젝트에서 특정 레이어의 숨기기 방법

예를 들어 사용자 개체가 있습니다. 사용자가 업데이트 될 때, 웹 애플리케이션은 User 객체를 생성하고이를 웹 서비스에 전달합니다. 웹 서비스는 DataAccessLayer를 사용하여 User 객체를 데이터베이스에 저장합니다. 이것을보고 난 후에 대신 User 클래스에 Save 메소드를 작성해야하는지 궁금합니다. 이렇게하면 서비스를 호출하고 db 업데이트를 트리거하는 사용자 개체에 저장을 호출하면됩니다.

그러나 이렇게하면 웹 응용 프로그램에서도 저장이 호출됩니다. 올바른지 확인하십시오. 웹 응용 프로그램은 동일한 User 객체에도 액세스 할 수 있기 때문입니다.

어쨌든이 문제가 있습니까? 아니면이 문제를 완전히 피하는 것이 더 좋습니까?

+1

이상적으로 인터페이스를 사용하여 레이어간에 객체를 전달하고 싶습니다. DAL이'User' 객체 대신에 사용하는'DataLayerUser' 클래스가 있다면 그 방법으로 인터페이스의 계약을 충족시킬 필요가 있습니다. 그리고이 연습에서,'DataLayerUser'는 DAL 레이어 만 볼 수있는'Save' 메소드를 가질 수 있습니다. – Khan

답변

1

User 개체는 논리가없는 데이터 만 보유하는 개체로 유지함으로써 염려가됩니다. 당신이 더 나은 이유는 다음과 분리 할 것 :

  1. 당신이 언급 한 바와 같이, 그것은 (이것이 중요하다 그들에게 관련이 저장 '기능이 다른 장소/클래스에 노출되기 때문에 나쁜 관행이다 일반적으로 프로그래밍 용).

  2. 서비스 레이어 수정 - SOAP를 통해 .NET 개체 (C#/VB)를 서비스로 전송할 수 있으므로 WCF 웹 서비스를 사용하고있는 것으로 생각됩니다. 저장 논리를 '사용자'개체에 넣으면 JSON 또는 XML과 같은 간단한 텍스트 데이터 구조를받는 다른 웹 서비스를 대체하거나 단순히 .NET 개체를 지원하지 않습니다.

  3. 데이터 저장 레이어 수정 - 예를 들어 MongoDB, RavenDB, Redis와 같은 다른 데이터베이스와 같은 다른 장소에 데이터를 저장하려면 원하는 각 클래스를 다시 구현해야합니다. 데이터 업데이트를 담당합니다. 이것은 단위 테스트 및 조롱과 관련이있어서보다 복잡한 질문을 할 수 있습니다.

관련 문제