Microsoft Visual Studio SDK DSL 도구 - 진지하게 받아들이는 사람이 있습니까?
-
21-08-2019 - |
문제
우리는 일부 추상 디자이너를 만들기 위해 Microsoft DSL 툴킷을 고려하고 있습니다.이미 몇 가지 POC를 수행했지만 동일한 내용에 대한 의견을 듣고 싶습니다.
Microsoft DSL Toolkit 및 T4 작업 경험을 공유할 사람이 있습니까?또한 오픈 소스 DSL 프로젝트에 대한 조언이 도움이 될 것입니다.Microsoft Service Factory 모델링 에디션은 DSL 도구 키트에 크게 의존합니다.
OSLO/Quadrant가 출시되려면 시간이 좀 걸릴 것이므로 우리가 할 수 있는 유일한 옵션은 Microsoft DSL 디자이너에 의존하는 것입니다.(동일한 내용에 대해서는 Kieth의 블로그를 참조하세요.)
또한 DSL에 대해 이미 알고 있는 정보는 다음과 같습니다.
해결책
우리는 DSL과 상당한 작업을 수행했으며 대부분의 작업을 수행 한 사람은 아니지만 하우스 및 고객 기반 컨설턴트 사용을 위해 많은 작업을 수행했습니다. 일단 당신이 모델링 (작은 위업 없음)을 해결 한 후에는 이것들이 훌륭한 도구라고 말할 것입니다.
나는 어떤 오픈 소스 프로젝트에서 당신을 불안정하게 지적 할 수 없으며, 나는 비 사소한 DSL을 얻고 실행하는 데 투자를 추가 할 것입니다. 그러나 당신이 그것들을 얻는다면 생산성 향상은 인상적입니다.
편집 - 몇 년 동안 경험을 마친 후 다음 관찰을합니다.:
- VS DSL에는 시각적 성능이 좋지 않습니다. 큰 다이어그램이 많으므로 모델 요소를 접어야합니다 (숨기기/표시)
- 상호 연결된 라인이 많은 대형 다이어그램은 탐색하기 어렵습니다 (레이아웃은 어렵다)
- 대형 모델은 코드 gen 등에 대해 적절하게 수행되며, 주로 사제화에 걸린 시간 (예상대로)
- 많은 수의지도로 인해 모델 비교가 어렵습니다.
- 좋은 개발자 경험을 위해서는 상자 외부 속성 대화 상자에 대한 많은 개발이 필요합니다.
- IP를 보호하기 위해 모델을 암호화 할 수 있으므로 나중에 비교를 매우 어렵게 만듭니다 (그러나 이것은 모든 암호화 된 파일에 해당됩니다.)
다른 팁
Visual Studio DSL 툴킷의 사용법을 살펴보았습니다.궁극적으로 나는 이러한 도구가 제한적이지 않다는 것을 알았습니다.기본 텍스트 문법을 쉽게 설명할 수 있는 기능 없이 GUI를 요구하는 것은 나에게는 부적절해 보입니다.GUI 없이 DSL을 쉽게 사용할 수 있는 기능이 필요합니다.
Oslo는 DSL에 대한 모든 메타데이터를 SQL DB에 저장하는 매우 이상한 방향으로 가고 있는 것 같습니다.그것은 나에게 관련이 없는 것처럼 보이며 특히 빠른 IDE 통합을 원하는 경우 속도가 느려질 수 있습니다.물론 깊이 생각해 보지는 않았기 때문에 제가 본 인상보다 더 나을 수도 있습니다.
여담으로, 저는 최근에 다음을 사용하여 DSL을 구현했습니다. 앤틀러.SO에 대한 질문에 대한 답변으로 내 게시물을 찾을 수 있습니다. 여기
위 외에도 노마 Object-Role 모델링 도구는 DSL 도구를 기반으로 구축됩니다. 그것은 그들과 함께 할 수있는 일의 매우 정교한 예이며, 모델 변환 및 코드 생성을 위해 XML 변환을 사용하는 것을 보여줍니다.
나는 확실히 진지한 테이커입니다. IVé는 최근 주문 시스템을위한 주문 처리를 모델링하기 위해 DSL을 만들었습니다. 우리는 특정 행에 어떤 ProcessTatus가 가지고 있는지에 따라 다른 웹 서비스에 연결하는 WindowsService를 사용한 다음 결과에 따라 상태를 변경합니다 (다음, 오류, 거부). DB- 테이블을 수동으로 편집하는 것은 매우 시간이 걸렸으므로 SQL 코드를위한 언어와 생성기를 만들었습니다.
프로젝트에서 코드를 게시 할 수 있는지 확인해야하지만 DB 구조를 게시하여 수동으로 편집하는 이유를 이해할 수 있습니다. Aprox에 대한 데이터를 넣어야합니다. 10 각 5-20 단계의 OrderProcesses는 동작과 모든 것을 갖습니다 (ProcessActionId는 웹 서비스에 대한 굴절입니다).
CREATE TABLE [dbo].[OrderProcessStep](
[OrderProcessCode] [int] NOT NULL,
[PreviousProcessStatusCode] [int] NOT NULL,
[NextProcessStatusCode] [int] NULL,
[DenialProcessStatusCode] [int] NULL,
[ErrorProcessStatusCode] [int] NULL,
[ProcessActionId] [int] NULL,
[StepComment] [varchar](500) NOT NULL,
[SecondsToNext] [int] NULL,
[SecondsToError] [int] NULL,
[SecondsToDenial] [int] NULL,
CONSTRAINT [PK_OrderProcess] PRIMARY KEY CLUSTERED
(
[OrderProcessCode] ASC,
[PreviousProcessStatusCode] ASC
)