>

이 문제에 직면 한 유일한 사람은 아니지만 지금까지 해결책을 찾을 수 없습니다. 문제는 다음과 같습니다.

레거시 시스템에서 웹 서비스 (제어 권한이없고 변경할 수 없음)를 게시했으며 모든 클라이언트가이를 사용하고 있습니다. 나는 웹 서비스에서 요청을 받고 객체는 매우 복잡하지만 예제를 위해 웹 서비스 호출에서 객체 B, 객체 C와 같은 다른 객체를 포함하는 객체 A를 수신한다고 말할 수 있습니다. 또한 객체 B&C에는 일부 원시 데이터 유형과 일부 다른 객체가 있습니다. 내 문제는 전체 객체 A (모든 포함 객체 및 하위 객체)를 확인하고 싶습니다. 여기에 어떤 디자인 패턴이 권장됩니까? 둘째, 여기서 중요한 점은 웹 서비스에서 다른 유형의 객체 A를 얻을 수 있다는 것입니다. 다른 유형의 객체 A에서 실제로 의미하는 것은 객체 A가 클라이언트에 의존한다는 것입니다. 즉 일부 클라이언트는 포함하는 객체 B의 데이터를 채우지 않고 객체 A를 보내거나 심지어 객체 B를 부분적으로 채운 다음 객체 A로 보낼 수 있습니다 따라서 클라이언트를 기반으로 객체 A의 유효성을 검사해야합니다 (일부 클라이언트는 객체 B를 포함해야하지만 일부는 객체 B 등의 요소가 거의 필요하지 않습니다). 즉, 클라이언트 ABC가 객체 B의 필드 abc를 문자열 유형으로 원하고 최대 길이는 25 자라는 것을 알려주는 각 클라이언트에 대한 유효성 검사 규칙을 저장할 장소가 있습니다. 해당 필드에 데이터가 있어야합니다.

수행하고 싶은 검증은

데이터 유형, 특정 필드의 길이에 대한 일부 개체 (예 : 개체 B)의 필드 확인은이 클라이언트에 필요한 필드이거나 선택적인 등입니다 ...

구체적인 구체적인 예제는 매우 유용합니다.

이 특정 예에 대한 객체 A의 구조는 다음과 같습니다.

   public class A
    {
        private B objectB;
        private C objectC;
        // and so on
    }
    public class B{
        private E objectE;
        private String name;
        private int age;
        // and so on
    } 
    public class C
    {
        private F objectF;
        private String address;
        private String country;
    }
    public class E
    {
        // Members here
    }
    public class F
    {
        // Members here
    }

추신 : 나는 일반적인 이해를 위해 클래스와 멤버에게 임의의 이름을 부여했습니다. O 예, 여기에서 java를 사용하고 있다는 것을 잊어 버렸지 만 디자인 원칙이나 패턴을 모든 언어에 적용 할 수 있으므로 실제로 중요하지 않습니다. 곧 여러분의 의견을 기다리겠습니다 .. :)

  • 답변 # 1

    유효성 검증은 교차 절단 문제입니다. 여러 가지 방법이 있으며 여러 가지 디자인 패턴을 구현할 수 있습니다.

    Asp.net에서는 속성을 통해 수행되고 있으며 Java Spring에서는 코드를 깨끗하고 읽기 쉽고 유지 관리하기 위해 주석을 통해 수행됩니다.

    여러 가지 접근 방식을 찾을 수 있습니다. 명심해야 할 것은 이러한 프레임 워크의 접근 방식입니다. 즉 코드 유지 관리, 가독성 및 깨끗한 코드입니다.

    은 탄환이 없습니다. 코드에서 유효성 검사를 작성할 수도 있습니다.

  • 답변 # 2

    각 수업은 스스로 검증하는 방법을 알아야합니다. .Validate () 메소드가있는 인터페이스 (예 : IValidatable)에서 각 클래스를 파생시킬 수 있습니다. 객체 A에서 .Validate ()를 호출 할 때 자체적으로 유효성 검사를 한 다음 모든 하위에서 .Validate ()를 호출하십시오. 그 아이들은 비슷한 방식으로 자신을 확인할 수 있습니다.

    이것은 정말 간단한 명령 패턴 버전이라고 생각합니다. 일종의.

    클래스에 연결할 수있는 유효성 검사기를 작성할 수도 있습니다. 유효성 검사기는 전자 메일 주소, 일반 주소 등의 유효성을 검사하는 방법을 알 수 있습니다. 기본적으로 필요한 도구 만 포함하는 클래스에 연결할 도구 상자를 만들 때 약간 확장 가능합니다.

관련 자료

  • 이전 c# - Visual Studio에서 테스트가 개별적으로 성공하고 집합에서 실패
  • 다음 regex - 아파치에게 LocationMatch와 반대로 말하는 방법?