빠른 시작 | 혜택 | 왜? | 목표 | 프로젝트 상태 | 불화 | Github 토론 | Github 문제 | 기여
Bitloops Language (BL)는 고 생산성, 도메인 별 언어 (DSL)로서 실제로 중요한 응용 프로그램의 비즈니스 논리에 집중할 수 있도록 도와줍니다.
소프트웨어 개발 모범 사례 및 DDD, BDD 및 계층/육각형 아키텍처와 같은 설계 방법론을 통합합니다.
Bitloops Language Language는 모든 소프트웨어 개발자가 깨끗한 코드를 작성하고 고품질 및 잘 설계된 소프트웨어를 구축 할 수 있도록합니다. 이는 특히 복잡하고 자주 변화하는 비즈니스 요구 사항이있는 서버 응용 프로그램 소프트웨어와 관련이 있습니다. BL을 사용하면 개발자가 시스템을 쉽게 이해하고 유지하고 변경할 수 있도록 문제의 분리, 느슨한 커플 링, 높은 응집력 및 명령 쿼리 책임 분리 (CQR)와 같은 원칙을 사용하여 소프트웨어를 구축 할 수 있습니다.
Bitloops 언어를 사용하면 개발자가 다음을 수행 할 수 있습니다.
본질적으로 소프트웨어 개발자는 자신이하는 일에 집중할 수 있습니다 : 문제 해결! Bitloops 언어 개발자는 다른 개발자 (및 6 개월 후에도)가 해당 코드를 쉽게 이해하고 구축 할 수있는 코드를 작성합니다.
켈 Bitloops 언어는 초기 단계이며 매우 활발한 개발 중이라는 점을 명심하십시오. 버그와 제한 사항을 기대합니다. v1.0.0에 도달하기 전에 후진 호환성이 보장되지 않습니다.
Bitloops 언어가 청정 코드를 작성하는 데 도움이되는 방법을 이해하는 가장 좋고 빠른 방법은 아래 지침을 따르는 것입니다. 이 튜토리얼을 사용하면 Bitloops Todo 앱을 실행하고 실행하고 Bitloops의 작동 방식을 배우고 TypeScript에서 출력 파일을보고 BitLoops 언어의 작동 방식을 이해하게됩니다.
문제가있는 경우 (특히 Windows와 함께) 아래의 공통 문제 섹션을 확인하십시오.
Bitloops는 여전히 Binaries를 만들지 않았으므로 Transpiler를 설치하고 실행하는 가장 좋은 방법은 Bitloops Language CLI를 글로벌 NPM 패키지로 설치하는 것입니다. 다음을 복사하여 IDE에서 실행하십시오.
npm install -g @bitloops/bitloops-language-cli또는 원사를 사용할 수 있습니다.
yarn global add @bitloops/bitloops-language-cliBitloops Todo 앱은 복제 할 수 있습니다. 아래 명령을 사용하여 링크 다음 파일을 추출하거나 복제 할 수 있습니다.
git clone https://github.com/bitloops/bitloops-language.git다음 단계는 BitLoops 언어 코드에서 Todo App 코드를 Tofecript 코드로 변환하는 것입니다. Transpile은 TransCompile이라는 단어에서 나오며 한 프로그래밍 언어에서 다른 프로그래밍 언어로 코드 변환을 의미합니다.
마코스 / 리눅스
bl transpile -s bitloops-language/examples/todo/bl-source/ -t output창
bl transpile -s bitloops-languageexamplestodobl-source -t output또는
bitloops-language transpile그게 다야! 이제 다음을 실행하여 자신이 얼마나 많은 줄의 코드를 저장했는지 확인할 수 있습니다 (스포일러 경고 : 77% 또는 2141 loc!)
bl analyze-lines -bl bitloops-languageexamplestodobl-source -ts ./output좋아, 이제 모든 비즈니스 논리가 잘 구조화 된 타입 스크립트 코드로 아름답게 변환되었습니다. ???!
Bitloops 언어의 범위는 여기서 끝나지 만 Bitloops를 사용하면 Bitloops Magic 및 AI를 사용하여 다른 모든 것을 자동으로 생성 할 수 있습니다! Bitloops는 Nest.js 프로젝트와 필요한 모든 인프라 (GRPC 또는 REST 컨트롤러, PostgreSQL 또는 Mongo 등을위한 저장소 어댑터)와 Docker 또는 K8S 파일을 생성합니다. 자동 비트 루프 프로세스에 대한 자세한 내용은 [여기를 클릭하십시오].
또는 원하는 프레임 워크 또는 Express Server 또는 Fastify 서버 등을 자유롭게 사용할 수 있습니다.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned크고 증가하는 코드베이스와 투자가있는 수많은 훌륭한 프로그래밍 언어가 있습니다. 그러나 시스템을 구축하고 유지 관리하는 조직이 직면 한 가장 일반적인 문제는 개발자 팀이 협력하는 시스템이 상호 연결된 서비스 시스템의 훌륭한 아키텍처와 설계입니다.
복잡한 시스템을 설계하여 시간이 지남에 따라 지속될 수 있고 개발자 (기존 및 신규 결합 자)가 코드베이스에서 일할 수 있도록 (또는 희망적으로) 생산성을 높이는 것은 매우 어렵습니다.
좋은 테스트는 좋은 건축과 디자인으로 가능해지는 오래 지속되는 제품의 추가 주요 요구 사항입니다. 불행히도, 전 세계의 지식이 풍부하고 숙련 된 선임 엔지니어가 필요한 모든 사람들에게 훌륭한 시스템을 구축하고 유지하기에 충분하지 않습니다. 회사가 운이 좋을 정도로 운이 좋으면, 시니어 엔지니어가 설계 결정으로 인해 시간이 지남에 따라 시스템이 저하되지 않도록하기 위해 선임 엔지니어보다 더 많은 주니어 엔지니어를 고용 할 수 없습니다.
Bitloops 언어는 중요한 소프트웨어 엔지니어링 원칙 및 도메인 중심 설계 및 행동 중심 개발과 같은 패턴을 훨씬 쉽게 채택하여 수년간의 경험을 성공적으로 수행 할 필요없이 이러한 문제를 해결하기위한 최초의 프로그래밍 언어입니다. 결과적으로 선임 엔지니어의 작업은 더 활용 될 수 있으며 주니어 엔지니어의 기여는 크게 향상되었습니다.
모든 소프트웨어 엔지니어는 공통 목표를 가지고 있습니다. 우리는 더 나은 코드를 작성하고 더 나은 소프트웨어를 구축하려고합니다.
그러나 이것은 중요하고 지속적인 헌신, 학습 및 경험을 통해서만 달성 할 수 있으며, 이는 많은 시간이 걸립니다. Bitloops는 개발자가 고품질 소프트웨어 구축을 시작하는 데 걸리는 시간을 크게 줄이려고하며, 이미 많은 소프트웨어 개발 모범 사례 및 설계 방법론을 통합 한 Bitloops 언어를 구축했습니다.
궁극적으로 BL의 목표는 다음과 같습니다.
Bitloops 언어는 가능한 한 인간 언어 및 비즈니스 논리에 가까운 단순한 구문을 정의하고 유지하여 시대를 초월하여 각 모듈 또는 경계 컨텍스트 내에서 유비쿼터스 언어를 채택하고 사용하는 데 도움이됩니다. 그런 다음 대상 언어의 현대적이고 최신 구문으로 변환하는 것은 BL의 작업입니다.
Bitloops 언어를 변환 된 언어로 만드는 것은 정확히이를 달성하기위한 핵심 결정이었습니다. Oraganisations가 비즈니스 논리를 시대를 초월한 언어로 작성 하여이 작업을 통해 Bitloops 언어 사용자에게 부담을주지 않으면 서 강력하지만 변화하는 대상 언어로 변환 할 수 있습니다. Bitloops 언어는 관련성, 최신 및 타협 언어의 최적화 된 코드로 전환 할 수 있습니다.
Bitloops 언어는 현재 초기 단계에 있습니다. 트랜스 필러는 개념 증명으로 만들어 졌으며이 단계에서 개발자 크리에이티브 코드 작성의 모든 범위를 다루기위한 것이 아닙니다.
우리는 귀하의 요구를 충족시키는 언어를 구축 할 수 있는지 여부와 DDD 커뮤니티와 그 밖에서 중요한 관심사를 수집 할 수 있는지 더 잘 이해하고 싶습니다.
앞으로 우리가 추가하고 싶은 많은 것들이 있습니다.
기고에 관심이 있다면 도움을 드릴 것입니다!
DDD 개념 (집계, 가치 객체, 사용 사례, 컨트롤러 등)을 이미 알고 있고 현대 프로그래밍 언어로 코딩하는 방법을 알고 있다면 Bitloops 언어를 선택하는 것이 정말 쉬워야합니다. 그것은 친숙하고 읽기 쉽고 이해하기 쉬운 일관된 언어 구성 세트로 구축되었습니다.
Bitloops는 객체 지향 언어이지만 일반적인 클래스는 없습니다. 특정 BitLoops 클래스는 ValueObject, 엔티티, 루트 엔티티, 명령, 명령 핸들러, 쿼리, 쿼리 핸들러, DTO, 소품, OK, ApplicationError, DomainError, 오류 등과 같이 빌드 된 것입니다.
이와 같은 비트 루프 언어 코드 (11 줄) :
// Bitloops Language:
Rule TitleOutOfBoundsRule ( title : string ) throws DomainErrors . TitleOutOfBoundsError {
isBrokenIf ( title . length > 150 OR title . length < 4 ) ;
}
Props TitleProps {
string title ;
}
ValueObject TitleVO {
constructor ( props : TitleProps ) : ( OK ( TitleVO ) , Errors ( DomainErrors . TitleOutOfBoundsError ) ) {
applyRules ( TitleOutOfBoundsRule ( props . title ) ) ;
}
}이 타이프 스크립트 코드 (28 줄)로 변환합니다.
// TypeScript:
import { Domain , Either , ok , fail } from '@bitloops/bl-boilerplate-core' ;
import { DomainErrors } from './errors' ;
export class TitleOutOfBoundsRule implements Domain . IRule {
constructor ( private title : string ) { }
public Error = new DomainErrors . TitleOutOfBounds ( this . title ) ;
public isBrokenIf ( ) : boolean {
return this . title . length > 150 || this . title . length < 4 ;
}
}
export namespace Rules {
export class TitleOutOfBounds extends TitleOutOfBoundsRule { }
}
interface TitleProps {
title: string ;
}
export class TitleVO extends Domain . ValueObject < TitleProps > {
get title ( ) : string {
return this . props . title ;
}
private constructor ( props : TitleProps ) {
super ( props ) ;
}
public static create ( props : TitleProps ) : Either < TitleVO , DomainErrors . TitleOutOfBounds > {
const res = Domain . applyRules ( [ new Rules . TitleOutOfBounds ( props . title ) ] ) ;
if ( res ) return fail ( res ) ;
return ok ( new TitleVO ( props ) ) ;
}
} 질문과 지원은 공식 불화 채널을 사용하십시오. 소프트웨어 개발 설계 패턴에 대해 자세히 알아 보려면 자유롭게 가입하십시오.
우리는 잘 설계된 코드와 고품질 소프트웨어를 민주화하는 임무를 수행하는 소규모 팀이며, 우리가 얻을 수있는 모든 도움을받을 것입니다! 참여하려면 기여 가이드 라인을 확인하여 도움을받을 수있는 방법과 위치를 배우십시오. 우리는 좋은 최신 문제를 식별하여 신속하게 기여하고 학습을 시작할 수 있습니다.
문제를 열기 전에보고 문제 지침을 읽으십시오. 가이드 라인을 준수하지 않는 문제는 즉시 폐쇄 될 수 있습니다.
BitLoops 언어를 사용하는 일반적인 도움은 다음과 같은 채널 중 하나를 사용하십시오.
Bitloops 언어에는 GNU 일반 공개 라이센스 v3.0이 있습니다. 라이센스 정보는 라이센스 파일을 참조하십시오.
Bitloops는 항상 Bitloops 언어와 플랫폼에 기여할 훌륭한 사람들을 찾고 있습니다. 앞으로 소프트웨어가 어떻게 구축되는지 근본적으로 개선하고자하는 팀에 가입하고 있다면 CV + 커버 레터 (매우 중요) + GitHub 프로파일 : [email protected]으로 보내십시오.