Мартин Фаулер (18 декабря 1963 г.) — британский разработчик программного обеспечения , [2] автор и международный оратор по разработке программного обеспечения, специализирующийся на объектно-ориентированном анализе и проектировании , UML , шаблонах и гибких методологиях разработки программного обеспечения, включая экстремальное программирование .
Его книга 1999 года «Рефакторинг» популяризировала практику рефакторинга кода . [3] В 2004 году он представил новый архитектурный шаблон , названный «Презентационная модель» (PM). [4]
Фаулер родился и вырос в Уолсолле , Англия, где он пошел в школу королевы Марии для получения среднего образования. Он окончил Университетский колледж Лондона в 1986 году. В 1994 году он переехал в Соединенные Штаты, где он живет недалеко от Бостона , штат Массачусетс, в пригороде Мелроуз . [1]
Фаулер начал работать с программным обеспечением в начале 1980-х годов. После окончания университета в 1986 году он начал работать в сфере разработки программного обеспечения для Coopers & Lybrand до 1991 года. [5] В 2000 году он присоединился к ThoughtWorks , компании по системной интеграции и консалтингу, [1] где он был главным научным сотрудником. [6]
Фаулер написал девять книг по теме разработки программного обеспечения. Он является членом Agile Alliance и помог создать Манифест Agile Software Development в 2001 году вместе с 16 другими подписавшими его людьми. [7] Он поддерживает bliki , смесь блога и вики . Он популяризировал термин Dependency Injection как форму Inversion of Control . [8] [9]
В своей книге «Доменно-специфические языки » Фаулер обсуждает предметно-специфические языки , DSL. Говорят, что DSL определяются как компонуемые языки программирования, с их фокусом на отдельной области и имеющие ограниченную выразительность. [10] : 27 Утверждается, что DSL могут повысить производительность, устраняя необходимость для программиста понимать полный язык программирования, предоставляя средства общения с экспертами в предметной области и отделяя способ выполнения задачи от определения самой задачи. [10] : 33 Эти преимущества сопоставляются со стоимостью изучения нового языка и создания инструментов для этого языка, разрозненностью, которая приводит к разным языкам и абстракциям, используемым в DSL, не подходящим для задачи. [10] : 39
Фаулер вводит концепцию внутреннего (или встроенного ) и внешнего DSL, внутренний DSL является DSL, который является подмножеством другого языка и может быть выполнен инструментами для этого внешнего языка. Ruby и Lisp приводятся в качестве примера языков, где внутренние DSL являются обычными. Он также вводит идею семантической модели , которая определяет выполнение DSL. [10] : 14 Представлены различные примеры DSL, включая graphviz , язык для указания графов, которые должны быть отрисованы; JMock , фреймворк для имитации Java; CSS , язык для указания стилистических элементов веб-сайта; HQL , объектно-реляционный преобразователь в Java ; XAML , язык, используемый для указания и изменения графических пользовательских интерфейсов ; FIT , язык для выражения сценариев тестирования; и make , инструмент для создания программного обеспечения [10] : 147
В книге обсуждается реализация внешнего DSL с использованием таких инструментов, как парсеры , лексеры , абстрактные синтаксические деревья и генерация кода, называемая «синтаксически-управляемым переводом» [10] : 219 Это контрастирует с «разделителем-управляемым переводом», который считается более простым, но менее мощным. Здесь язык достаточно прост для интерпретации путем разделения на разделители и переключения логики на основе отдельных записей. [10] : 201
Обсуждаются способы реализации внутренних DSL, при этом особое внимание уделяется вложенным вызовам функций [10] : 357 последовательностям вызовов функций [10] : 351 или цепочке методов [10] : 373 среди других методов.