2014-10-20 1 views
0

런타임에 프로그래밍 방식으로 사용자 지정 양식을 생성하려고합니다. Silverlight Lightswitch 화면을 생성하는 방법은 메타 데이터에서 양식 정의를 읽고 런타임시 TextBox 및 DatePicker 컨트롤을 일반 화면의 StackPanel 컨트롤에 추가하여 알아 냈습니다. 또한 이러한 컨트롤을 데이터 소스에 바인딩하여 양식 데이터를 자동으로 읽고 데이터베이스에 저장할 수 있도록하고 싶습니다.Lightswitch : 런타임시 동적 데이터 바인딩

내 질문은 데이터 소스를 설정하고 런타임에 컨트롤을 바인딩하려면 어떻게해야합니까? Lightswitch는 UI 설계 화면에서이 작업을 수행하는 방법을 숨기는 데 아주 능숙합니다. 그리고 이미 답변을 찾으려고 온라인에서 두 시간의 연구를했습니다.

답변

1

솔직히 말해서, 나는 정말로 할 수없는 것을 요구하고 있다고 생각합니다.

동적 바인딩 된 데이터 모델을 쉽게 사용할 수있는 기술이 있다고 확신합니다. (Visual Basic 6.0과 유사한 내용을 보았습니다.하지만이 솔루션은 데이터 액세스 성능에 문제가 생겼습니다. 데이터 세트가 확장되기 시작 함). LightSwitch와 VB 6.0의 차이점은 VB 6.0을 사용하면 런타임에 화면을 동적으로 구성하고 데이터 바인딩을 수정할 수있었습니다. 이는 VB6.0 앱이 늦은 시각에 바인딩되어 있다는 사실에 의해 촉진되었습니다. 실행중인 인터프리터로 실행중인 VB. LightSwitch의 출력은 .Net MSIL - 특히 서버 측에서 컴파일됩니다. 이 코드는 어셈블리 언어 나 기계어 코드가 아닌 MSIL로만 컴파일 되더라도 강력하게 형식화되고 초기에 바인딩됩니다.

LightSwitch는 각각의 .LSML 파일에서 데이터 및 화면 모델에 대해 실행되는 T4 템플릿을 기반으로 코드를 생성하고 필요에 따라 추가 코드 숨김/추가 JavaScript로 기본 클래스를 확장하여 서비스 계층에 대해 컴파일 할 때 데이터 바인딩을 수행합니다 . 즉석에서 서비스를 생성하지 않는다면 LightSwitch가 응용 프로그램을 실행할 때 존재하지 않는 서비스에이 화면 (이 시나리오에서는 쉬운 비트)을 바인딩 할 수있는 방법을 알 수 없습니다.

또한 LightSwitch는 일반적으로 데이터 모델의 엔티티가 강하게 입력 될 것으로 예상합니다. 키 - 값 쌍 (예 : 사전 개체) 엔티티를 CRUD 작업에 대해 공개 된 강력한 형식의 테이블 형식 데이터 세트로 변환 한 서비스를 만들 수 있었다고해도 데이터 액세스 성능은 완전히 끔찍할 것입니다. 고유 한 제약 조건, 테이블 조인 등을 조정하는 데 최적화 된 데이터베이스가 필요 없습니다. ugh 관계형 데이터베이스만큼 성능이 좋은 곳은 어디에도 없습니다. 일종의 NoSQL 데이터베이스가 성능을 향상시킬 수도 있지만 LightSwitch LINQ를 Entities 쿼리로 변환하여 플랫폼 별지도 축소 작업으로 변환하는 서비스가 필요합니다.

나는 절대적인 방법으로는 할 수 없다고 말하는 것은 아닙니다. SQL Server 테이블에서 XML 형식의 열에 쓸 수있는 XML 문서로 화면 데이터를 작성하는 경우이를 수행 할 수 있습니다. 이를 위해 필요에 따라 화면 문서를 언 래핑 할 수 있도록 일종의 참조 XML 스키마 문서 (또는 XML 유형에 이러한 참조 XSD를 포함하는 테이블에 대한 외래 키)를 포함시켜야합니다.

그러나 실버 라이트는 이러한 XSD를 기반으로 한 스크린을 구현하는 데 가장 좋은 기술이 될 것이라고 생각하지 않습니다. 또는 XML 중심의 데이터 모델을 노출시킨 서비스에 데이터 저장 레이어를 바인딩하는 데이터입니다. 이 프로세스를 스크린 템플릿으로 만들 수도 있지만 궁극적으로 Silverlight는 너무 강하게 입력되고 초기 바인딩에 최적화되어 있습니다. HTML 클라이언트는 스크린 용 HTML을 내보낼 때 create() 이벤트를 가로 챌 수 있고, before_ApplyChanges() 스크린 이벤트는 와이어를 통한 전송을 위해 화면 데이터를 XML로 직렬화 할 수 있기 때문에 훨씬 더 의미가 있습니다.그러나 LightSwitch가 CSS를 제외하고 방출하는 거의 모든 것을 효과적으로 대체 할 수 있습니다.

내 의견으로는 ASP.NET MVC 애플리케이션과 같은 모델로 KVP 스키마를 모델링하고 XML 스키마/데이터에 XSLT 변환을 효과적으로 적용하는 뷰 템플릿을 빌드 할 수 있으므로이 작업을하는 것이 좋습니다. 필요로하는 무거운 작업을 수행 할 수 있으며, 생성 된 화면과 동적 데이터 모델 사이에 여분의 코드 레이어 (예 : LightSwitch의 배관)를 배치하지 않아도됩니다. Dynamic (화면)에서 Dynamic (데이터)까지 동적 (화면)에서 Strongly Typed (Silverlight 화면 배관)와 비슷한 솔루션보다 훨씬 간단하고 효율적입니다. 더 강력하게 입력 된 (Entity 서비스 모델) XML 저장소).

강한 타이핑이 존재한다는 사실을 기억하십시오. 그것은 잘 수행됩니다. 그것은 결과를 얻는다. 동적 양식 및 데이터로만 전달할 수있는 명확한 비즈니스 요구 사항이있는 경우 해당 패턴에 최적화 된 솔루션 아키텍처를 사용하십시오. IMO, LightSwitch (생성 된 코드를 사용하는 초기 바인딩)는 찾고있는 아키텍처가 아닙니다. 파도 손, 제다이 마인드 컨트롤 :)

+0

대단히 감사합니다. 어쨌든 긴 샷이라고 생각했습니다. 화면의 LSML 코드를 생성하고 수동으로 VS에 붙여 넣으면 다소 해킹 될 수 있지만 여전히 데이터 소스를 설정해야합니다. 또한 LS가 데이터 테이블 정의에 대해 매우 까다로운 것으로 나타났습니다. 테이블 정의에서 다른 이름으로 저장을 수행하여 전체 프로젝트를 망쳤습니다! 수업은 배웠다. –