Как стать автором
Обновить

chatGPT написал за меня статью для Хабра и какой она вышла

Время на прочтение6 мин
Количество просмотров30K

Всем привет! На волне хайпа с chatGPT мне захотелось попробовать попросить нашумевшую нейронку сделать за меня работу писателя. Я потратил 10 минут и вот, что из этого вышло.

Ниже текст самой статьи. Без правок и редактуры, как сама сеть его сгенерировала по запросу "Напиши мне статью в стиле статей портала habr.ru на тему DDD в Python с использованием функционального программирования":

Hidden text

DDD (Domain-Driven Design) - это подход к разработке ПО, который сосредоточен на понимании бизнес-домена и его моделировании с помощью техник и шаблонов. Он позволяет разработчикам создавать программные системы, которые эффективно отображают и поддерживают бизнес-процессы.

 

В последнее время DDD широко используется совместно с функциональным программированием для улучшения читаемости, масштабируемости и сопровождаемости кода. Функциональное программирование предлагает множество инструментов для управления сложностью, а также подходящую модель программирования, которая легко совместима с концепциями DDD.

 

Одним из главных инструментов DDD является модель предметной области (Domain Model), которая отражает сущности и их взаимодействия в бизнес-домене. В функциональном программировании мы можем использовать чистые функции и иммутабельные объекты для моделирования наших сущностей, что помогает нам сохранять целостность и состояние данных в нашей системе.

 

Также в DDD есть концепция служб (Services), которые представляют собой некоторую логику, которая не принадлежит конкретным сущностям. В функциональном программировании мы можем вынести эту логику в отдельные чистые функции, что поможет нам улучшить тестируемость и уменьшить связанность между различными частями нашей системы.

 

Использование DDD вместе с функциональным программированием в Python позволяет нам создавать эффективные и гибкие программные системы, которые легко поддерживать.

Ниже приведен пример кода, демонстрирующий использование DDD и функционального программирования в Python. В данном примере мы моделируем сущность "Пользователь" и службу "Аутентификация".

 

from typing import Tuple

 

class User:

    def __init__(self, username: str, password: str):

        self.username = username

        self.password = password

 

    def __repr__(self):

        return f'User(username={self.username})'

 

def authenticate(user: User, username: str, password: str) -> Tuple[bool, User]:

    if user.username == username and user.password == password:

        return True, user

    return False, None

 

user = User("john_doe", "password123")

is_authenticated, authenticated_user = authenticate(user, "john_doe", "password123")

if is_authenticated:

    print(f"User {authenticated_user} is authenticated.")

else:

    print("Authentication failed.")

В данном примере мы создали класс User для моделирования сущности "Пользователь". Мы также создали чистую функцию authenticate для моделирования службы "Аутентификация". Функция authenticate принимает на вход объект User и данные для входа, и возвращает кортеж, содержащий результат аутентификации и аутентифицированный объект User, если аутентификация удачна.

Организация слоя взаимодействия с базой данных и веб-фреймворком по правилам чистой архитектуры и DDD может выполняться следующим образом:

 

1. Создание репозиториев: Репозиторий представляет собой слой, который отвечает за взаимодействие с базой данных. В этом слое определяются функции для доступа к данным, такие как выборка, создание, обновление и удаление.

class UserRepository:

    def get_user(self, user_id: int) -> User:

        # Code to fetch user from database

        pass

 

    def create_user(self, user: User) -> None:

        # Code to insert user into database

        pass

2. Создание слоя взаимодействия с веб-фреймворком: Этот слой отвечает за представление данных в веб-формате и выполнение действий, вызываемых пользователем. Например, если пользователь запрашивает данные о пользователе, этот слой будет использовать репозиторий для получения данных.

Структура проекта, построенного с использованием принципов DDD, чистой архитектуры и функционального программирования, может выглядеть следующим образом:

my_project/

|-- domain/

|   |-- __init__.py

|   |-- entities/

|   |   |-- __init__.py

|   |   |-- customer.py

|   |   |-- order.py

|   |-- use_cases/

|   |   |-- __init__.py

|   |   |-- customer_use_cases.py

|   |   |-- order_use_cases.py

|   |-- repository/

|   |   |-- __init__.py

|   |   |-- customer_repository.py

|   |   |-- order_repository.py

|-- infrastructure/

|   |-- __init__.py

|   |-- database/

|   |   |-- __init__.py

|   |   |-- database_access.py

|   |-- web/

|   |   |-- __init__.py

|   |   |-- web_framework.py

|-- main.py

Директория domain содержит код, относящийся к сущностям и бизнес-логике проекта. В директории entities находятся классы сущностей, такие как Customer и Order. Директория use_cases содержит код, описывающий использование сущностей в бизнес-логике. Директория repository содержит код, описывающий хранилище сущностей.

Для другого примера, пусть наш проект имеет два корневых пакета: app и infrastructure.

 

app пакет будет содержать все сущности, сервисы и интерфейсы нашего приложения. В данном случае, это может выглядеть так:

app

├── entities

│   └── order.py

├── services

│   └── order_service.py

└── interfaces

    └── order_repository.py

Пакет infrastructure будет содержать все внешние зависимости и инфраструктуру приложения, такие как базы данных, веб-фреймворк и другие слои. В данном случае, это может выглядеть так:

infrastructure

├── db

│   └── repository.py

├── web

│   └── views.py

└── middleware

    └── logging.py

repository.py будет содержать все функции взаимодействия с базой данных. views.py будет содержать все endpoint'ы, которые мы хотим предоставить для взаимодействия с веб-фреймворком. logging.py может содержать все необходимые методы для ведения логов.

 

В этом подходе, мы отделяем наши сущности и сервисы от внешних зависимостей, тем самым создаем проект с хорошей структурой и легкостью в поддержке и расширении.

Можно использовать функциональный подход в слое app, где мы можем использовать чистые функции для обработки данных и предоставления их в веб-фреймворк для отображения. Также мы можем использовать функциональные методы в слое database, где мы можем оперировать с данными в базе данных через чистые функции, которые обеспечивают целостность данных и высокую производительность.

В заключение, использование DDD, чистой архитектуры и функционального программирования в Python может дать нам мощный инструмент для решения сложных задач в разработке приложений. Это позволяет нам построить проекты, которые легко поддерживать и расширять в будущем, а также обеспечивает высокую производительность.

И вот тут мне хотелось бы немного порассуждать. Ресурса моего времени было потрачено около 10 минут. На выходе получился в целом сносный результат. Во всяком случае не хуже многих других обзорных статей по разным тематикам, которые мне доводилось читать на хабре за долгое время. Возможно, если я бы потратил еще пол часа, пообщался с нейросетью подробнее, то результат мог бы стать еще кратно лучше. Я мог бы попросить ее в конце добавить список рекомендуемой литературы по теме, чтобы это все выглядело еще убедительнее.

Сейчас эта нейросеть уже пишет дипломы, которые можно успешно защитить в типичном российском вузе. Stack Overflow уже запретил публиковать ответы, сгенерированные нейросетью. А что ждет порталы, вроде Хабра? Где огромное количество статей имеет обзорный характер о работе с какими-то технологиями, куча статей представляют из себя туториалы. При не большом ресурсе затраченного времени и chatGPT такой контент может начать появляться в неприличных масштабах. Может Хабру стоит быстрее задуматься о том, что ждет его, как портал в новых реалиях? Как Хабр сможет отличить рукописные статьи от сгенерированных?

Интересный вопрос, на который хотелось бы услышать ваше мнение в комментариях ниже. Кто мы, пользователи и писатели Хабра и куда мы идем? Или куда нас приведут нейросети.

Теги:
Хабы:
Всего голосов 49: ↑37 и ↓12+38
Комментарии109

Публикации

Истории

Работа

Data Scientist
68 вакансий

Ближайшие события

2 – 18 декабря
Yandex DataLens Festival 2024
МоскваОнлайн
11 – 13 декабря
Международная конференция по AI/ML «AI Journey»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань