문제

코드 생성 도구를 사용합니까 (프록시를 생성하는 데 사용되는 것과 디자이너에서 비주얼 스튜디오에 이르기까지) 도구를 사용합니까?

응용 프로그램의 어떤 부분을 생성합니까?

일반적으로 자신의 발전기를 굴립니다. 그렇다면 어떤 유형의 생성기를 작성합니까 (ASP 템플릿, 코드 등). 그렇지 않다면 어떤 타사 도구를 사용하십니까?

저는 현재 데이터베이스 구조, 비즈니스 엔터티, DAL 및 BLL을 생성함으로써 모든 것을 처리하는 사용자 정의 코드 제너레이터를 사용하여 현재 몇 가지 다른 프로젝트를 진행하고 있습니다. 다른 사람들의 경험이 이러한 종류의 도구에 대한 경험이 궁금합니다.

도움이 되었습니까?

해결책

나는 코드 생성기를 "잘못된"것으로 간주하는 철학적 캠프에 있습니다. 왜냐하면 그들은 언어의 일부가되어야하는 것을 나타 내기 때문입니다.

그러나 코드를 작성하는 코드를 작성하는 것은 실용적인 프로그래머의 윤리의 큰 부분이었으며 실제로 코드 생성이 기본적으로 숨겨져있는 경우 코드 생성이 잘 작동합니다. 철학적으로 순수하게 원하는 것이더라도, 언어는 당신이 해결하고자하는 문제만큼 빠르게 진화하지 않을 것입니다.

Visual Studio에서 Windows 양식을 작성할 때 생성되는 코드가 떠 오릅니다. 원하는 경우 생성 된 코드를 볼 수 있지만 더 나은 아이디어입니다. 그러나 WPF가있는 선언적 언어로 이동하는 것이 우수했습니다. 왜냐하면 그것은 명령 코드보다 프로그래밍 방식으로 선언 코드를 조작하는 것이 더 깨끗하고 신뢰할 수 있기 때문입니다.

그들은 LINQ-to-SQL 클래스에서 동일한 일을해야했습니다. 속성이 있고 사용자 지정 행동이없는 클래스에는 선언적 언어가 필요합니다. 아마도 기본 데이터베이스 스키마가 변경 될 때 자동으로 해당 엔터티 클래스를 동적으로 만들 수 있습니다.

우리는 Codesmith를 사용하여 데이터베이스의 모든 테이블에 대한 .Nettiers 클래스를 생성했지만 두 가지 문제를 해결했습니다.

  1. .nettiers가 부풀어 오르고 생성 된 코드는 엄청났습니다. 코드 생성 도구가 생성기를 너무 쉽게 만들 수 있다고 생각합니다.

  2. 스키마가 적극적으로 개발되고 개정 되었기 때문에 우리는 또한 많은 재생을해야했기 때문에 모든 파일이 재생되고 교체 되었기 때문에 소스 제어를 유지하기가 매우 어려워졌습니다. 생성 된 코드가 확실하지 않은 것입니다 소스 제어에 전혀.

코드 생성을위한 가장 좋은 장소는 설계 단계가 아닌 컴파일러 또는 빌드 단계에 있어야합니다. C#에서 익명 유형 또는 메소드를 사용하면 컴파일러가 코드 생성을 즉시 수행합니다. 디자인 단계에서 코드를 생성하면 물건 기본 매개 변수가 변경 될 때마다 재생해야합니다.

다른 팁

예,하지만 우리는 그것들을 인턴이라고합니다.

우리는 .NET/웹 도메인에서 일하고 있지만 다양한 가정 디자인 언어의 집에서 만든 코드 세대 도구는 개발 도구 체인의 중요한 부분입니다. 우리는 그러한 두 가지 주요 도구 (문법 및 파서 및 공식 정의 포함)와 M4 및 Perl과 같은 매크로를 기반으로 한 작은 도구가 있습니다. 그들은 모두 기본적으로 편집 된 평범한 C를 생성합니다.

도메인 별 언어는 제 경험에있어 대규모 소프트웨어 노력을위한 프로그래머 생산성을위한 핵심 도구 중 하나입니다. 컴파일러, 시뮬레이터 또는 기타 복잡한 소프트웨어와 같은 물건을 구축하는 경우 기본 언어 (일반적으로 휴대용 C 및 때로는 C ++를 의미하는)에서 전혀 지원하지 않는 많은 반복 패턴이있는 매우 복잡한 소프트웨어를 구축하는 경우 코드 생성 도구가 진행됩니다. 나는 도메인 별 언어를 일반화의 다음 단계로 본다 : 먼저 공통 계산을 함수 (또는 역사적으로 서브 루틴)로 나눈 다음, 그러한 시설을 이용할 수있는 경우 일반적인 기능을 템플릿이나 제네릭으로 나눈 다음 깨뜨립니다. 더 공통성과 반복되는 코드는 본격적인 커스텀 언어로 반복됩니다.

실제로 쓰는 코드의 양을 줄이고 프로그래밍 프로세스에서 지루한 반복 및 비가 부여 된 코드를 제거하는 것입니다. 패턴이 반복 되 자마자 도메인 별 언어를 적용하십시오!

클래식 ASP 작업을 수행 할 때 (2001 년경) 내 자신의 발전기 (데이터 액세스, 스프로스 등)를 롤아버하기 시작했습니다. 처리하기가 훨씬 쉬워서 코드 메스로 천천히 옮겼습니다. 나는 여전히 .NET 코드에 대한 모든 데이터 액세스 계층 유형 (SPROC 포함)을 생성하고있었습니다.

몇 년 전, 나는 매크로 코드 생성 (즉, 코드 메스미)에서 마이크로 코드 생성으로 점프했습니다.

차이점은 Codesmith를 사용하여 내 앱, 모든 일반 및 한 번에 엄청난 코드를 생성했다는 것입니다. 이는 템플릿 (즉, 테이블 구조)의 소스를 변경할 때 에지 케이스와 재생에 문제가되었습니다. 또한 사용하지 않은 코드를 운반하는 높은 인벤토리가 있었지만 템플릿에서 생성 된 사례가 발생했습니다. 그 모든 방법이 작동 했습니까? 그럴 수도 있고 아닐 수도 있고. 생성 된 코드에 들어가서 정리하는 것은 엄청난 양의 작업이었을 것입니다 (즉, 동일한 코드베이스에서 1 년이 지난 후).

대조적으로 마이크로 코드 생성은 내가 원하는 올바른 시나리오에서 필요한 클래스를 정확하게 생성 할 수있게합니다. 내가 이것을하는 데 사용하는 기본 도구는 resharper입니다. 제가이 작업을 수행하는 방법은 제작 코드를 작성하기 전에 단위 테스트를 작성하는 것입니다. 이 시나리오에서 Resharper는 내 단위 테스트를 템플릿으로 사용하여 생산 코드의 골격을 자동 생성합니다. 그런 다음 블랭크를 채우는 문제 일뿐입니다.

데이터 액세스를 위해 더 이상 아무것도 생성하지 않습니다. 좋은 O/RM이 데이터 액세스 계층 (예 : NHibernate)에 넣는 데 사용한 모든 것을 대체한다는 것을 알았습니다. 그 점을 감안할 때, 나는 내 인생에서 다른 데이터 액세스 계층을 쓰거나 생성하지 않을 것입니다 (거부합니다).

게다

Fog Creek Software의 사내 언어 인 Wasabi에는 컴파일 타임 코드 생성기가 내장되어 있으므로 데이터베이스 테이블에 매핑되는 엔티티 클래스의 고기를 자동으로 작성하는 데 사용합니다. 따라서 12 개의 다른 속성과 방법으로 수업을 작성하는 대신 다음을 쓸 수 있습니다.

<ActiveRecord("Kiwi")> _
Class CKiwi
End Class

그리고 CKIWI는 KIWI 테이블의 기본 스키마에 정의 된 모든 열에 대한로드 (IX AS int32), Commit () 및 필드/속성을 갖습니다. 그것은 우리가 거대한 O/RM 라이브러리를 갖지 않아도되지만 여전히 제품에 테이블을 신속하게 추가 할 수 있습니다.

컴파일러 정신의 코드 생성은 훌륭 할 수 있습니다. "마법사"의 정신에있는 코드 생성은 균일하게 나쁜 생각으로 판명되었습니다.

우리는 Codesmith를 사용하여 Nhibernate HBMS, 엔터티 및 기타 몇 가지를 생성했습니다. 잠시 후 우리는이 흐름이 아프게되었으므로 우리는 그것을 버렸습니다.

T4 생성기는 무료이며 세대를 찾는 가치가 있습니다.

우리는 여전히 Monorail 링크 생성을 위해 Castle CodeGenerator를 사용합니다.

  1. 예외를 위해 코드 생성기를 사용합니다
  2. CRUD 운영을위한 DAO 생성
  3. JaxB를 사용하여 코드를 생성하십시오
  4. XDoclet을 사용하여 EJB 로컬/홈 인터페이스를 생성하십시오
  5. 속도 템플릿을 사용하여 비즈니스 모델에 대한 문서를 생성하십시오
  6. Apache 축을 사용하여 WSDL 스터브를 생성하십시오

내가 만난 활성 작가 몇 달 전, 제가 좋아하는 것은이 접근법의 유연성이며, 데이터 액세스 문제를 처리하는 부분 클래스를 생성하고 클래스의 비즈니스 부분을 코딩 할 수 있습니다. 나는 매우 만족스러운 원인으로 인해 많은 작업을 구해주고 스키마를 바꾸고 재생하고 계속하는 것이 매우 좋습니다.

작업을위한 나만의 도구를 만듭니다. 재미 있고 장기적으로 시간을 절약 할 수 있습니다. 매우 둔한 작업을 위해서는 산성을 절약 할 수 있습니다.

홈 브루드 코드 생성기 ~해야 한다 일하다.

보다 테스트 케이스 구축을위한 툴링 예를 들어.

우리는 LLBLGEN을 사용하여 데이터 액세스 계층을 생성합니다. 사용중인 데이터베이스에서 생성기를 가리키고 사용하려는 테이블을 선택하고 필요한 클래스를 휘젓습니다. 모두 매우 빠르고 쉽습니다.

우리는 데이터베이스 액세스를 처리하는 사내 구축 코드 생성기가 있습니다. 하나는 저장된 절차를 작성하고 게이트웨이 클래스에서 추상화 된 해당 방법을 얻습니다.

또한 Flash와 올바르게 인터페이스하기 위해 웹 서비스를 생성합니다. 즉, 예외는 제정신 방식으로 예외를 처리합니다.

마지막으로 우리는 예외 모범 사례의 드루게리 (생성자 등의 톤 등)를 빼앗아가는 예외 생성기가 있습니다.

이전 고용주에게는 XSD (XML Schema 정의 파일)를 정적 C ++ 라이브러리로 바꾸는 집에서 성장한 VB.NET 응용 프로그램이있었습니다. 이로 인해 C ++ 데이터 유형 (bool, std :: string 등)으로 작업하기가 훨씬 쉬워졌으며 흥미로운 XML 코드는 모두 생성 된 클래스 내부에 숨겨져있었습니다.

우리는 방금 사무실에서 성배를 사용하기 시작했습니다. 이전에는 사내 JSF/Hibernate Crud Generation Scripts 세트가있었습니다.

... 성배가 승리합니다. Grails의 코드 생성은 매우 좋으며 실제로 코드 파일에 코드를 넣지 않고 약 15 분 안에 CRUD 앱을 얻을 수 있습니다!

물론 수정하려면 실제 코드를 코드 파일에 생성 할 수 있습니다. 대부분의 경우, 정기적으로 CRUD를 위해, 당신은 단지보기를 바꾸는 것을 피할 수 있습니다.

나는 다른 플랫폼 (Windows, Linux, Solaris, Mac, BSD 등)을 통해 개질 될 수있는 직렬화 가능한 데이터 객체를 생성하는 데 하나를 사용했습니다. 사내 솔루션이었습니다.

나는 파서를 작성한 데이터 형식의 전문가들이 웹 양식을 통해 자신의 샘플을 제출하고 출력을보고 그것이 올바른지 알려주는 사랑스러운 도구를 썼습니다.

그로부터 주니트 테스트가 생성됩니다. 사랑스러운.

한 사람이 그것을 사용하지 않았다는 것을 제외하고는 그것을 사용하지 않았으며, 나는 테스트 케이스를 수집하지 않았다.

여기 다른 사람들과 마찬가지로 데이터 액세스, HTML 양식 처리 및 특정 비즈니스 로직 작업을위한 자체 코드 생성기 (Inon Datamanager/ViewManager)를 만들었습니다. 이 작업을 잘 수행하는 열쇠는 생성 된 코드를 만지거나 볼 필요가 없도록 디자인하는 것입니다.

이런 식으로, 언어의 일부가됩니다. 언어 (우리의 경우 Java)는 도메인 모델 사양과 뷰 모델을 포함하도록 확장 된 다음 실제 Java 코드로 사용자 정의 비즈니스 로직을 작성합니다.

이를 통해 분석가 및 비즈니스 사용자와 의사 소통 할 수있는 올바른 도구를 제공하면서도 Java의 힘이 기본 행동의 세부 사항을 설정할 수 있습니다.

우수한 Llblgen에 관심이 있다면 Subsonic도 평가할 수도 있습니다. 어쩌면 Rob Conery가 Subsonic과 T4의 중복 또는 상호 작용에 대해 무엇을 말해야하는지 볼 수도 있습니다.

XSLT 기반 코드 생성 도구를 작성하고 사용합니다. http://perfectstorm.codeplex.com/

이것은 단일 루트 XML 모델을 사용하여 DAL, Procs, 테이블을 생성합니다.

Java 스크립트, 액션 스크립트, Java, C# 및 Objective C와 같은 여러 언어로 웹 서비스에 대한 프록시 클래스를 생성하는 사용자 정의 코드 생성 프레임 워크를 만들었습니다. 일부 헬퍼 클래스로 코드를 생성하는 일반 C# 코드 만 사용하지 않습니다. 코드 생성은 실제로 많은 시간을 절약 할 수 있지만 생성 된 코드는 가능한 한 간단해야하며 과도하게 사용해서는 안된다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top