Кіріспе

ІТ-архитектурасы іс-әрекеттерді және деректерді оқуды бөлу. Командалық сұранысты бөлу (CQS) – императивті компьютерлік бағдарламалау қағидасы. Оны Бертран Мейер Эйфель бағдарламалау тіліндегі пионерлік жұмысының бір бөлігі ретінде ұсынды. Оған сәйкес, әрбір әдіс немесе әрекетті орындайтын команда, немесе шақырушыға деректерді қайтаратын сұраныс болуы керек, бірақ екеуінің қатарында болмауы тиіс. Яғни, сұрақ қою нәтижесін өзгертпеуі керек. Көбірек ресми тұрғыда айтқанда, әдістер тек қана референттік ашықтыққа ие болса және тиісінше жанама әсерлері болмаса ғана мән қайтаруы керек.

Келісімшарт бойынша жобамен байланыс

Командалық сұранысты бөлу, әсіресе келісім-шарт бойынша жобалау (DbC) әдістемесімен үйлесімді, онда бағдарламаның дизайны бастапқы кодқа енгізілген, белгілі бір маңызды сәттерде бағдарламаның күйін сипаттайтын нақтылаулар түрінде беріледі. DbC-де нақтылаулар жобалау түсіндірмелері болып есептеледі, бағдарлама логикасы емес, сондықтан олардың орындалуы бағдарлама күйіне әсер етуі тиіс емес. CQS DbC үшін пайдалы, себебі кез келген мән қайтаратын әдіс (кез келген сұраныс) бағдарлама күйін өзгертуден қауіптенбей, кез келген нақтылау арқылы шақырылуы мүмкін. Теориялық тұрғыдан алғанда, бұл саналылықтың бір деңгейін қамтамасыз етеді, осы арқылы бағдарлама күйін бірден өзгертусіз оның күйі туралы ой жүргізуге болады. Практикалық тұрғыдан алғанда, CQS жұмыс істеп тұрған жүйеде барлық нақтылау тексерулерін айналып өтуге мүмкіндік береді, осылайша оның өнімділігін арттырып, мінез-құлқына ешқандай әсер етпейді. CQS сондай-ақ кейбір түрдегі хайзенбұрттардың пайда болуын болдырмауы мүмкін.

Бағдарламалық жасақтауға әсері

Келісім-шарт бойынша жобалаумен байланыстың сыртында да, CQS-ті оның жақтастары бағдарламаны қарапайымдастырады деп есептейді, оның күйлерін (сұраулар арқылы) және күй өзгертулерін (бұйрықтар арқылы) түсінікті етеді. CQS объектіге бағытталған әдістемеге өте ыңғайлы, бірақ объектіге бағытталған бағдарламалаудан тыс қолданылуы да мүмкін. Бұйырсыз әсерлер мен қайтарым мәндерін бөлу объектіге бағытталған емес болғандықтан, CQS кез келген бағдарламалау парадигмасына пайдалы болады, егер ол бұйырсыз әсерлерді талдауды талап ететін болса.

Командалық сұраныстың жауапкершілік бөлігі

Командалық сұраныс жауапкершілігін бөлу (CQRS) архитектуралық деңгейде CQS-ті қызметтерге кеңейтеді: ол деректерді алу және өзгерту үшін жеке сұрау және команда интерфейстерін, сондай-ақ әдетте дерек моделін қолдану арқылы CQS принципін іске асырады.

Басқа сәулет үлгілері

CRUD арқылы өзара әрекеттесетін жалғыз бейнелеуден алшақтағанда, тапсырмаға негізделген UI-ға оңай көшуге болады. CQRS оқиғаларға негізделген бағдарламалау үлгілерімен үйлесімді. CQRS жүйесінің оқиғалармен ынтымақтастықта байланысатын жеке қызметтерге бөлінуі әдеттегі жағдай. Бұл қызметтерге оқиғалармен басқарылатын архитектураны оңай пайдалануға мүмкіндік береді. Жеке модельдердің болуы оларды үйлесімді ұстаудың қаншалықты қиын екендігі туралы сұрақтар тудырады, бұл соңғы үйлесімділікті қолдану мүмкіндігін арттырады. Көптеген салалар үшін, жаңарту кезінде қажетті логиканың көп бөлігі қажет болады, сондықтан сұраныс жағындағы модельдерді жеңілдету үшін "Eager Read Derivation" пайдаланудың мәні болуы мүмкін. Егер жазу моделі барлық жаңартулар үшін оқиғаларды жасаса, оқу модельдерін оқиға хабаршылары ретінде құруға болады, олар жад суреттеріне айналып, дерекқормен көптеген өзара әрекеттесулерден сақтануға мүмкіндік береді. CQRS күрделі салаларға, сондай-ақ домендік дизайннан пайда көретін салаларға қолайлы.