2008-11-03 4 views
1

웹 응용 프로그램 데이터베이스 3 티어 서버 설정이 있습니다. 웹은 앱에서 데이터를 요청하고 앱은 데이터를 db에서 가져와 처리 한 다음 웹에 표시하여 표시합니다. 표준.코드 중복없이 appserver에서 웹 서버로 객체를 직렬화하는 방법

현재 웹에서 웹으로 직렬화 한 모든 데이터는 웹 측에서 표시를 위해 사용자 정의 된 데이터 구조체에 저장됩니다. 즉, 검색하고 웹에 보내려는 주문이 있다고 가정 해보십시오. 전체 객체를 직렬화하지는 않지만, 애플리케이션 서버에서 적절한 데이터 요소를 가진 배열을 만든 다음 웹 서버로 배열을 직렬화합니다.

이제 전체 주문 개체를 웹 서버에 직렬화하는 방법을 살펴 보았습니다.

앱 서버와 웹 서버 코드의 분리를 유지하면서 객체를 직렬화하는 데 가장 좋은 방법은 무엇입니까? 내 웹 서버에 DB에 액세스하는 코드는 필요 없지만 가능한 한 내 주문 및 기타 데이터를 캡슐화하는 클래스를 다시 사용하기를 바랍니다.

글렌의 답변에 감사드립니다. 내 웹 서버에 비즈니스 로직 중 하나라도 주문 클래스라고 말하면 좋지 않습니다. 앱 서버 만 알면됩니다. 객체는 이미 데이터베이스와 /와 웹 서버간에 별도의 직렬화를 사용합니다.) (즉,

$ 순서 -가> 취소; 주문 예제를 사용

, 애플리케이션 서버에, 주문을 취소 할 수 있어야한다

하지만 웹 서버에서는이 방법을 찾을 수 없습니다. 사용자 작업 요청은 응용 프로그램의 권한 부여 및 사용 권한 확인 계층을 통해 진행해야하기 때문에 응용 프로그램 순서의 취소 방법으로 직접 (직접) 다시 프록시해서는 안됩니다.

그렇다면 웹 서버에서 코드 복제가 거의없이 애플리케이션에있는 객체의 메서드와 속성 중 일부만 (모두는 아님) 객체를 가져 오려면 어떻게해야합니까? 한 가지 생각한 것은 제한된 속성 및 메서드 집합을 사용하여 기본 클래스를 만드는 것입니다. 내부 클래스를 사용하여 속성을 보유 할 것이므로 모든 데이터 액세스가 getter 및 setter를 통과하도록해야합니다. 이것들은 내부 클래스의 getter와 setter를 호출합니다.

그러면 웹 및 앱 서버가 독립적으로 기본 클래스를 확장하고 사용자 정의 내부 클래스를 사용하여 속성을 보유 할 수 있습니다. 그런 다음 응용 프로그램 측면에서 내부 클래스는 데이터를 DB에 유지할 수있는 ORM 클래스 확장이 될 수 있으며 웹 측면에서 내부 클래스는 간단한 속성 홀더 클래스가 될 수 있습니다.

하지만 내부 클래스의 모든 것이 다소 어수선해 보였으므로 더 나은 솔루션을 찾고 있습니다. Adapter pattern를 사용하여 별도의 클래스로

답변

3
  • 팩터 아웃 형태별 시리얼 번호. 문제가있는 도메인 클래스가 보조 저장소 중립이됩니다.
  • 응용 프로그램 계층에서 관계형 데이터베이스 특정 어댑터 클래스를 사용하여 데이터 계층으로 개체를 직렬화합니다.
  • 웹 계층에서 HTML 특정 어댑터 클래스를 사용하여 웹 브라우저와 개체를 직렬화합니다.
  • 웹 계층과 응용 계층간에 객체를 직렬화하기 위해 XML (또는 가장 적합한 것으로 간주되는 와이어 프로토콜 형식)을 사용하여 특정 어댑터 클래스를 웹 및 응용 계층 모두에서 사용합니다.
  • 문제 도메인 클래스마다 다른 어댑터 클래스 집합이 필요하지 않도록 이러한 어댑터 클래스를 충분히 포괄적으로 만드는 방법을 충분히 이해할 수 있으면 추가 점수를 얻습니다.
1

질문을 올바르게 이해하면 개체의 데이터를 직렬화하려고하지만 다시 수화 될 때 다른 유형의 개체 (제한된 기능 및/또는 다른 기능) ?

선호하는 프로토콜에 따라 다른 방법으로이 작업을 수행 할 수 있습니다. 예를 들어 SOAP을 사용할 수 있습니다. 그런 다음 개체를 서버 쪽이 아닌 클라이언트 쪽에서 다른 클래스로 수화해야합니다. PHP의 네이티브 serialization을 사용할 수도 있고, 클라이언트에서 다른 코드베이스를 사용하거나 (혼란 스러울 수도 있음) b) 직렬화 된 문자열 (예 : 클래스 이름 바꾸기)을 사용하여 비트를 조롱하십시오. A crude example은 PHP 매뉴얼에 대한 주석에서 찾을 수 있습니다.

+0

예, 예를 들어, appserver 주문 객체를 상위 클래스 (Order_Base라고 함)로 캐스팅 한 다음 웹 서버 측에서 Order_Base로 재수화한 다음 웹 서버 측의 하위 클래스 생성자로 전달하여 하위 클래스를 구성하십시오. 모두 조금 어설픈지만 .. – Zak

관련 문제