2016-10-26 3 views
0

Java/Linux 백엔드와 C# .NET GUI/Windows 응용 프로그램에서 실행해야하는 복잡한 유효성 검사 논리가 있는데 DRY를하고 싶습니다. 로직은 서버 파트의 webmethod를 통해 액세스 할 수 있지만 사용자가 데이터를 변경할 때마다 유효성 검사가 실행되어야하므로 webmethod를 반복적으로 호출하는 것은 충분하지 않습니다. 이 문제를 해결하는 방법은 무엇이며 가능한가?클라이언트와 서버 간의 코드 재사용을 달성하는 방법

현재 스크립팅 언어를 사용하고 있지 않으며 가능한 경우 언어를 솔루션에 추가하지 않도록하고 싶습니다.

현재, 나는 대략가는 다음과 같은 방법을 고려 중이 야 :

  • 그것은 언어 중 하나에 논리를 작성하고 컴파일시에 언어를 다른 언어로 소스 파일을 변환 할 수 있어야한다. 이것은 아마도 특정 인터페이스를 구현하는 클래스 일 것이지만 using/import 문장은 무엇입니까?
  • 관리되지 않는 .dll을 생성하고 Linux 및 Windows 용으로 컴파일하고 JNI/PInvoke를 사용하여 메소드를 호출 할 수 있어야하지만 다른 플랫폼에 대해 관리되지 않는 .dll을 작성하는 데 충분하지 않습니다. C 또는 C++이 될 가능성이 높습니다. 이는 제가 자제하고 싶은 (새로운 언어 추가) 것입니다.
  • 제발, 조언.

    +0

    한 가지 언어에서 다른 언어 또는 공유 네이티브 코드로의 변환이 필요하지 않은 일종의 스크립팅 언어/사용자 지정 DSL을 사용하는 것을 선호합니다. 아마 당신이 필요로하는 것을 제공하는 라이브러리가 꽤있을 것입니다 : 자바와 C#을위한 API 바인딩을 제공하는 것을 실행하는 엔진과 검증 논리를 기술하는 dsl. 내 마음에 오는 하나의 언어는 ECMA Script/JavaScript입니다. – Thomas

    답변

    -1

    내가 할 일 : 유효성 검사에 적용 할 제약 조건을 설명하고,이를위한 파서를 구현하고, 메모리 내 모델에서 설명 파일을 읽고, 모델에 기반한 소스 코드 생성기를 구현합니다.

    당신이 JSON 형식의 텍스트로 그 제한 사항을 설명 할 수 있다고 생각하면 할 수 있습니다

    1. 설계 단계 1 기껏 JSON schema - 당신이 그렇지 않으면, 절대적으로 현학적 될하려는 경우에만이 JSON 구조의 간단한 설명/사양으로 충분해야합니다.
    2. 파서 구현을 건너 뛰고 이미 JSON-> 일반 개체 바인딩 라이브러리 (자바 세계에서는 gson이 마음에 들었습니다)를 사용합니다. 인 메모리 모델은 1 점에서 사양으로 잘 작동 할 수 있습니다.
    3. 이 메모리 모델에서 언어 특정 소스 생성하는 templating 패키지를 사용하여 내 취향이 될 것입니다 다시

    그러나, (자바 세계에서 다시를, 나는 Apache's Velocity 좋은 경험을했다) : 나는 유사했다 최근의 3-4 배에 이르기까지, 나는 접근 방식에 대해 크게 느끼고있다. (그리고 '소스 코드 생성'의 단점을 알고있다. - 주요한 것들 : 생성 된 코드에 대한 사용자 정의 세분화가 적용될 필요가 있더라도, 그들은 차세대에서 겹쳐 쓰일 위험에 처해 있습니다 : 코드를 클래스로 생성하고 동작을 사용자 정의하기 위해 파생시킵니다.)

    +0

    고맙습니다. Velocity는 좋은 옵션이며, .NET 용 포트도 있습니다. "큰 것"접근에 대한 추가 명성. – meriarith

    +0

    @meriarith 그래, 잘 ... JavaCC 파서로도 해봤 다. JSON 방식은 과도하게 장황한 '스펙 언어'를 초래했다. 내부의 다양한 인공물 간의 관계를 추적하기가 너무 어렵다. 기술로 잘 작동하며 구현은 그로킹 후에 ​​충분히 빠르게 진행됩니다 (즉, 처음 두세 가지 경험 만이 어렵습니다 :)). –

    0

    클라이언트 측 유효성 검사는 데이터 조작을 초래할 수 있으므로 최소한으로 유지해야합니다. 동일한 라이브러리 클라이언트와 서버를 사용하면 클라이언트 DLL이 리버스 엔지니어링 된 경우 서버 측도 이해할 수 있습니다.

    유효성 검사를 최소화하고 (숫자 필드에 문자가 없음) 데이터가 올바른 것으로 가정하고 서버가 유효성을 검사하고 클라이언트에 알리고 데이터를 되돌릴 수없는 경우 약속대로 작업하는 것이 좋습니다.