2012-07-13 1 views
2

두 개의 프로젝트가 있습니다. 하나는 웹 서비스이고 다른 하나는 해당 웹 서비스를 쿼리하는 Windows 모바일 응용 프로그램입니다.두 개의 다른 대상 플랫폼에 대한 클래스를 만드는 방법

예를 들어 '동물'이라는 클래스가 있습니다. 나는 webservice를 사용하여 Animal의 인스턴스를 모바일 장치로 반환하려고합니다. 문제는 모바일 장치가 완전히 .net 프레임 워크를 지원하지 않는다는 것이고 Animal 클래스에는 전체 프레임 워크가 필요한 몇 가지 기능이 있습니다.

내 최고의 옵션은 무엇입니까? Animal 클래스는 실제로 텍스트 인 속성 만 포함합니다. XML 메시지로 데이터를 파싱하고이를 모바일 장치로 다시 보내려면 (실제로 모바일 장치에서 Animal 개체를 사용하지 않습니까?) 아니면 각 플랫폼에 대해 하나씩 2 개의 클래스를 만드시겠습니까?

감사합니다.

+1

2 개의 클래스를 생성하면 유지 보수에 심각한 영향을 미칩니다. XML 또는 JSON을 고려하십시오. –

답변

0

두 프로젝트간에 코드 파일을 공유 할 수 있습니다. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 추가 -> 기존 항목을 선택한 다음 추가 버튼 옆에있는 아래쪽 화살표를 클릭하면 타겟팅 된 경우에도 두 프로젝트 모두에 대해 클래스가 컴파일된다는 것을 알고 있으면 "링크로 추가"옵션이 표시됩니다. 다른 플랫폼에서는이 두 프로젝트의 클래스를 공유 할 수 있습니다.

0

동일한 코드를 사용하여 Windows와 Mobile을 실행합니다.

모바일 기기 단어 PocketPC 프로젝트의 속성에서 정의를 따라서, 당신이 (당신이 C#으로 코딩되어 있기 때문에) 할 일은 다음과 같습니다

public static bool CreateDirectoryWithPermission(string path) { 
    bool ok = false; 
    DirectoryInfo dir = new DirectoryInfo(path); 
#if !PocketPC 
    try { 
    DirectorySecurity ds; 
    if (dir.Exists) { 
     ds = dir.GetAccessControl(); 
    } else { 
     ds = dir.Parent.GetAccessControl(); 
    } 
    string user = Environment.UserDomainName + @"\" + Environment.UserName; 
    FileSystemAccessRule rule = new FileSystemAccessRule(user, FileSystemRights.FullControl, AccessControlType.Allow); 
    ds.AddAccessRule(rule); 
    dir.Create(ds); 
    ok = true; 
    } catch (Exception) { } 
#endif 
    if (!ok) { 
    try { 
     dir.Create(); 
     ok = true; 
    } catch (Exception) { } 
    } 
    return ok; 
} 

내가 제대로 기억한다면, System.Security.AccessControl는 아래에 정의되어 있지 않습니다 Windows Mobile이므로 DirectorySecurity은 정의되지 않았습니다.

UPDATE : 여기

이 관심있는 일을 할 수있는 또 다른 방법은 다음과 같습니다, 완전히 별도의 네임 스페이스에 직렬화 클래스를 만듭니다 두 프로젝트 모두에 해당 네임 스페이스를 사용하는 WebService에에서 직렬화 된 데이터를 전달 모바일 장치. 나는 또한 그렇게한다. 그러나 더 많은 코드가있다.

namespace LocksAnimal { 

    [Serializable()] 
    public class Animal { 

    private string name; 

    public Animal() { 
     name = "Lock"; 
    } 

    public string GetName() { 
#ifdef PocketPC 
     return name + " (Mobile Version)"; 
#else 
     return name + " (Webservice Version)"; 
#endif 
    } 

    } 

} 

WebService에 버전은 물론, 더 상세한 정보를 확인할 수 (GetAccessControl() 등은 첫 번째 코드 세그먼트에 도시).

이 아이디어가 도움이되기를 바랍니다.

+0

웁스! 난 그냥 당신이 두 환경에 대한 코드가 아닌 OBJECT를 전달하는 방법을 요구하고 있다는 것을 깨달았다. 이 문제를 검토 한 후 메모를 남겨두고 삭제 여부를 알려주십시오. 그것은 여전히 ​​다른 형식에 대한 1 클래스 코딩에 유용한 정보를 가지고 있습니다. – jp2code

+0

안녕하세요. 답장을 보내 주셔서 감사합니다. 아직 어떻게해야하는지 잘 모르겠습니다. 그래서 저는 웹 서비스에서 'Animal'객체를 말합니다. 이 객체를 다시 모바일 장치로 전달하고 싶습니다. 나는 2 개의 클래스 (하나는 모바일 버전이고 하나는 웹 서비스에서 호환 가능)를 생성하고 싶지 않다. 그들의 방법입니까? JSON 또는 뭔가를 통해 데이터를 serialize 할 수 있지만 데이터가 장치에 도달 할 때 실제로 같은 클래스의 개체가 될 수는 없다는 것을 알고 있습니다. – Lock

+0

WebServer에 특정한 것을 제외시키기 위해 클래스를 작성해야 할 수도 있습니다. 기본 클래스에서 파생 된 특수 웹 서버 클래스입니다. 직렬화 할 때 기본 클래스 만 serialize합니다. 말이 돼? – jp2code

관련 문제