- PVSM.RU - https://www.pvsm.ru -
Добро пожаловать в серию статьей «Марсоход», где мы будем использовать следующие практики:
В этой вводной статье мы просто обозначим спецификации нашего марсохода.
Примечание. Этот пример является адаптированной для нужд серии статей версией упражнения, представленного на Dallas Hack Club [2], который сейчас, к сожалению, лежит.
Но сначала, давайте кратко пройдемся по упомянутым выше терминам.
Монолитный репозиторий представляет собой единое версионированное хранилище, содержащее множество пакетов, связанных друг с другом, имеющие возможность быть разделенными на собственные репозитории, но по причинам удобства сложенные в одном месте.
Этот подход дает нам следующие преимущества:
Однако, он также приносит и следующие недостатки:
Такие репозитории имеет смысл делать для проектов, которые будут упакованы / выпущены вместе (хотя и самостоятельные репозитории не исключают подобной возможности)
Примечание. Вот несколько ссылок для дополнительного знакомства с монолитными репозиториями:
CQRS — это о разделении логики «записи» и «чтения», и ее можно применять на многих уровнях, например:
Важно отметить, что CQRS также может быть частично применен в рамках проекта: используйте его только когда это действительно имеет смысл.
Примечание. Вот несколько ссылок о CQRS:
С ES каждое значимое действие записывается как «событие». Отслеживание таких событий обеспечивает следующие преимущества:
Как и с CQRS, важно отметить, что ES также может быть применен _частично_ в проекте: используйте его только когда есть необходимость.
ES часто ассоциируется с CQRS, но они могут использоваться и по отдельности.
Примечание. вот несколько ссылок об ES:
TDD можно свести к трем шагам:
Написание тестов до кода заставляет нас задуматься о том, как будущий код использовался бы. Это как писать спецификации, но сразу с тремя целями: проектирование, разработка документации и автоматизированная регрессионная проверка.
Такой подход легко позволяет иметь высокое покрытие кода (хотя, строго говоря, все равно нужно проверять все возможные пути кода, не только успешные).
Примечание. вот несколько ссылок о TDD:
Цель этой серии заключается в создании программного обеспечения марсохода, согласно следующим спецификациям:
Марсоход должен будет сначала приземлиться в заданном положении. Положение состоит из координат (X
и Y
, являющихся целыми числами) и ориентации (строковое значение north
, east
, west
или south
).
После всего этого он сможет ездить с помощью инструкций, таких как move_forward
(сохраняя ориентацию, но двигаясь по оси x
или y
) или turn_left
/turn_right
(сохраняя те же координаты, но изменяя ориентацию).
Время от времени, он будет сообщать текущее местоположение (опять же x
и y
координаты и ориентацию).
Например, ровер может приземлился на 23
, 42
, north
и затем получить инструкции двигаться вперед дважды, затем налево, а затем снова вперед. Когда будут запрошены координаты, он сообщит 22
, 44
, west
.
Из приведенных выше спецификаций, можно выявить как минимум три варианта использования:
В следующей статье мы создадим проект и его первый пакет: navigation
.
Примечание. Мы будем использовать:
Автор: iGusev
Источник [34]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/207710
Ссылки в тексте:
[1] Image: https://habrahabr.ru/post/314536/
[2] Dallas Hack Club: http://dallashackclub.com/rover
[3] Advantages of a monolithic version control: http://danluu.com/monorepo/
[4] On Monolithic Repositories: http://gregoryszorc.com/blog/2014/09/09/on-monolithic-repositories/
[5] Command / Query Responsibility Segregation: https://www.pvsm.ru/2015/08/25/cqrs.html
[6] CQRS: http://martinfowler.com/bliki/CQRS.html
[7] Adding the R to CQS: some storage options: http://www.jefclaes.be/2013/02/adding-r-to-cqs-some-storage-options.html
[8] Clarified CQRS: http://udidahan.com/2009/12/09/clarified-cqrs/
[9] Functional foundation for CQRS / ES: http://verraes.net/2014/05/functional-foundation-for-cqrs-event-sourcing/
[10] Messaging Flavours: http://verraes.net/2015/01/messaging-flavours/
[11] Avoiding the Mud: https://speakerdeck.com/richardmiller/avoiding-the-mud
[12] Do not mistake DDD for CQRS. Yeah but where to start?: https://medium.com/@benjamindulau/do-not-mistake-ddd-for-cqrs-yeah-but-where-to-start-5595b8e68a4d#.vnh8i8rhb
[13] CQRS/ES: https://moquet.net/talks/phptour-2015/
[14] Fighting Bottlenecks with CQRS: http://verraes.net/2013/12/fighting-bottlenecks-with-cqrs/
[15] Using logs to build a solid data infrastructure or: why dual writes are a bad idea: https://martin.kleppmann.com/2015/05/27/logs-for-data-infrastructure.html
[16] Event Sourcing: http://martinfowler.com/eaaDev/EventSourcing.html
[17] Practical Event Sourcing: http://verraes.net/2014/03/practical-event-sourcing.markdown/
[18] Meeting the Broadway team — talking DDD, CQRS and event sourcing: http://php-and-symfony.matthiasnoback.nl/2015/07/meeting-the-broadway-team/
[19] Straw man TDD: http://codemanship.co.uk/parlezuml/blog/?postid=1170
[20] Coverage!!!: http://codemanship.co.uk/parlezuml/blog/?postid=1202
[21] The Failures of “Intro to TDD”: http://blog.testdouble.com/posts/2014-01-25-the-failures-of-intro-to-tdd.html
[22] TDD, avoid testing implementation details: http://tech.mybuilder.com/coupling-tests/
[23] Monogamous TDD: http://blog.8thlight.com/uncle-bob/2014/04/25/MonogamousTDD.html
[24] When TDD doesn’t work: http://blog.8thlight.com/uncle-bob/2014/04/30/When-tdd-does-not-work.html
[25] Does TDD really lead to good design?: http://codurance.com/2015/05/12/does-tdd-lead-to-good-design/
[26] TDD is dead, long live testing: http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live-testing.html
[27] What TDD is and is not: http://www.daedtech.com/what-tdd-is-and-is-not/
[28] TDD, where it all went wrong: https://vimeo.com/68375232
[29] TDD and Complexity: https://medium.com/@davidihunt/tdd-and-complexity-1bbd5ca51ee7#.4mzrdro57
[30] Giving up on TDD: http://blog.cleancoder.com/uncle-bob/2016/03/19/GivingUpOnTDD.html
[31] Composer: https://getcomposer.org
[32] phpspec: http://phpspec.net/
[33] расширение SpecGen: http://memio.github.io/spec-gen
[34] Источник: https://habrahabr.ru/post/314536/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best
Нажмите здесь для печати.