• Где взять реальные примеры кода использования ооп в веб-сервисах?

    @netcore
    Есть группа людей которые не понимают в программировании ничего, но у них есть идея, понимание как работает продукт, и деньги (но это вторично)
    Назовем эту группу людей бизнес

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

    Сначала бизнес описывает боль которую решает продукт
    В чем боль? Бизнес раньше продавал газеты, а теперь хочет свою интернет газету.
    1. Они не хотят тратить деньги на печать, а просто делать посты новостей и статьи.
    2. Они не хотят платить деньги на транспортные расходы развозить газеты, а делать рассылки на электронную почту
    3. Они хотят получать обратную связь (комментарии)
    этого достаточно для примера.

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

    Затем описываются сущности этого продукта и действующие лица в этом продукте
    Что мы можем понять из этого? Какие у нас есть сущности?
    1. пост - новость или статья на сайте.
    1.1. На этом этапе выясняем у бизнеса в чем отличие новости от статьи.
    Бизнес говорит: у новости (например) есть только одна картинка, текст.
    У статьи есть так же текст но картинок может быть несколько, так же не может быть комментариев.
    Бизнес забыл про то что в дизайне есть еще и дата, тут уже додумывает сам программист взглянув на макеты.
    В итоге у нас получается одна абстрактная модель Post и две ее реализующие: Article и News.

    public abstract class Post
        {
            protected Post(string text, int writerId)
            {
                Text = text;
                CreationDate = DateTime.Now;
                WriterId = writerId;
            }
    
            public int Id { get; set; }
            public string Text { get; private set; }
            public DateTime CreationDate { get; private set; }
            //Идентификатор писателя статьи\новости
            public int WriterId { get; private set; }
    
            //Автоматически подтягиваемая из базы модель писателя через ORM по WriterId
            public virtual Writer Writer { get; set; }
    
        }
    
        public class Article : Post
        {
            public Picture[] Pictures { get; private set; }
    
            public Article(string text, int writerId, Picture[] pictures) : base(text, writerId)
            {
                Pictures = pictures;
            }
        }
    
        public class News : Post
        {
            public Picture Picture { get; }
            
            //Массив комментариев к посту
            // private set -- говорит о том что массив инкапсулирован
            // и управлять массивом можно только через метод AddComment
            public List<Commentary> Commentaries { get; private set; }
    
            public News(string text, int writerId, Picture picture) : base(text, writerId)
            {
                Picture = picture;
            }
    
            public void AddComment(Commentary commentary)
            {
                Commentaries.Add(commentary);
            }
        }


    Далее у нас есть ролевые модели и у каждого своя бизнес логика.
    2. Подписчик - получатель новостей. Бизнес хочет что бы каждый зареганый юзер автоматически стал подписчиком. Такого в реальном мире не будет, нельзя, но для примера норм.
    3. Писатель - тот кто пишет статьи\новости.

    Две эти модели отличаются между собой только ролью и наличием у подписчика поля email. По этому приведем вот такие ООП модели

    public abstract class User
        {
            public int Id { get; set; }
            public string Username { get; private set; }
            public string Role { get; private set; }
            
            protected User(string role, string username)
            {
                Role = role;
                Username = username;
            }
        }
    
        public class Subscriber : User
        {
            public string Email { get; private set; }
            
            public Subscriber(string username, string email) : base(nameof(Subscriber), username)
            {
                Email = email;
            }
        }
    
        public class Writer : User
        {
            public Writer(string username) : base(nameof(Writer), username)
            {
            }
        }


    Поле пароль опущено, тут много чего опущено для простоты восприятия.

    3. Комментарий - обратная связь от юзера в посте. При чем хочу заметить от ЮЗЕРА, бизнес говорит что писать могут как и подписчик так и писатель

    public class Commentary
        {
            public int Id { get; set; }
            public string CommentText { get; private set; }
            public int UserId { get; private set; }
            
            public virtual User User { get; private set; }
            
            public DateTime CommentCreationDate { get; private set; } 
            
            public Commentary(int userId, string commentText)
            {
                UserId = userId;
                CommentText = commentText;
                CommentCreationDate = DateTime.Now;
            }
        }


    Вот - хоть и примитивно и немного неправильно (а то щас налетят пет программисты) но мы описали модели, абстрагировали одинаковые поля в абстрактные классы. Инкапсулировали поля и добавили методы которые описывают как работает класс. Инициализация полей происходит только в конструкторах. Работа с полями только с предоставленными для этого методами.

    Прошу прощения что не PHP, но C# тоже C подобный, так что проблем с чтением на уровне моделей быть не должно.

    Одна из функций ООП -- что бы программисты понимали бизнес.
    Ну и человеку прозе описывать поведение реального мира объектами и как эти объекты между собой взаимодействуют.
    Есть целые методологии разработки ПО такие как DDD, где вообще ядро кода пишется на копароративном языке и жестко соблюдаются правила названия моделей и описания алгоритмов бизнес процессов бизнеса. Код получается самодокументированным. Были случаи когда ядро по DDD писали даже на русском, потому что бизнес большой, а новичкам, кто приходил кодить в фирму, было быстрее и проще вкатиться в понимание прикладной практики бизнеса и понять по коду как бизнес устроен на разных слоях.
    Ответ написан
    1 комментарий
  • Как смоделировать вселенную?

    webinar
    @webinar
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Думаю в процессе создание подобной системы Вы столкнетесь с рядом проблем, решение которых потянет на нобелевскую премию каждое.
    Я думаю, что взяться за подобное может только человек, который даже приблизительно не понимает как это реализовать и от того и не видит в этом проблем.
    Я уже молчу про вычислительные мощности, которые понадобятся.
    Начните с чего попроще, например напишите алгоритм, который умеет играть в шашки. Или ИИ для игры в крестики нолики.
    Ответ написан
    14 комментариев
  • Как хранить подписи объектов в Laravel?

    @Kostik_1993
    Web Developer
    Я бы не советовал так извращаться. У меня на сайте есть вывод городов, и когда мне нужно вывести название города в определенном падеже я использую библиотеку morphos

    Для примера чтобы вывести название в предложном падеже я написал в модели метод
    public function getNameRpAttribute()
    	{
    		// Имя в предложном падеже
    		return \morphos\Russian\GeographicalNamesInflection::getCase($this->attributes['name_ru'], 'предложный');
    	}

    С данной библиотекой вы сможете сделать многие вещи касаемые склонений слов и будет вам счастье и счастье человеку которому нужно будет потом редактировать контент
    Ответ написан
    1 комментарий
  • Агрессивное собирание инфы о пользователе через браузерный js?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Сбор инфы - только для троллинга ЦА к покупке вашего продукта (Или нет?!)
    Не нужно тратить время на тех, кто пришёл просто, чтобы потролить вас.

    Как делаю я:
    вешаю краткое назначение продукта и текст:
    "Мы продаём только тем, кому это нужно. Всем остальным - просьба не беспокоить.
    Если Вы заинтересованы и Вам это реально нужно - заполните следующие поля формы:"
    и тут форма на 2 поля и кнопка "Без вопросов".

    Всё остальное - нах не сдалось!
    Задача, не насобирать бесполезной инфы, а сразу получить АДЕКВАТНЫХ ЦЕЛЕВЫХ клиентов, которые купят с вероятностью более 80% ваш РЕАЛЬНО НУЖНЫЙ ПРОДУКТ/УСЛУГУ!
    (Или я что-то путаю?!)

    PS: мне вообще не интересно его: имя, ник, пол, возраст, друзья и кол-во ласт, если он вдруг пингвин) Купил? Отлично! -> Я - в прибыли!
    Ответ написан
    1 комментарий
  • Непонятные страницы GET запросов в статистике Яндекс Вебмастере, как с этим бороться?

    @mletov
    Точный ответ, откуда берутся такие ссылки, дать не могу. Может это особенности CMS, на которой вы сделали сайт. Может какие-нибудь баннерные сети, через которые вы рекламируетесь, генерят такие внешние ссылки на ваш сайт. Но все это не суть.

    1) Для всех страниц пропишите canonical
    2) Пропишите в robots.txt clean-param для cof, cx и пр
    https://yandex.ru/support/webmaster/controlling-ro...
    3) Сгенерите sitemap.xml

    Всякие левые url должны сами отсеяться.

    PS добавьте в теги "SEO" и "Поисковая оптимизация"
    Ответ написан
    1 комментарий
  • Как настроить маршрутизацию между двумя локальными сетями?

    ifaustrue
    @ifaustrue
    Пишу интересное в теллеграмм канале @cooladmin
    Это @#$%$%@##@ а не организация сети!

    А по сути, вроде бы, достаточно на PC Thethys CT:
    route add 192.168.2.0/24 192.168.168.229

    А на PC Thethys MRI
    route add 192.168.1.0/24 192.168.168.30
    Можно с ключами -p чтобы получить результат не стирающийся после перезагрузки.

    Это будет работать только при условии, что оба этих ПК способны маршрутизировать трафик и являются для целевых ПК шлюзами по-умолчанию, иначе нужно на целевых пк добавлять маршруты.
    Ответ написан
    Комментировать
  • Как настроить маршрутизацию между двумя локальными сетями?

    gbg
    @gbg Куратор тега Компьютерные сети
    Любые ответы на любые вопросы
    Если вы не хотите "попасть" на "конкретную" сумму денег, в которую встанет восстановление ПО MRI и рабочих станций врача после того, как в них набьются вирусы, пересмотрите схему сети так, чтобы радиологическая сеть была отделена от остальной сети брандмауэром, а лучше - вообще никак не была связана с ней и интернетом.

    P.S. ВСЕМ ЖЕЛАЮЩИМ ВСЕ ЖЕ ДАТЬ АВТОРУ ОТВЕТ НА ЕГО ВОПРОС!
    Зная специфику ПО, встроенного в большинство медтехники, я могу сказать, что практически ни один встроенный медицинский компьютер не имеет ни активного брандмауэра, ни антивируса, ни возможности "просто так" переставить систему.
    Учтите, что своими действиями автор рискует вывести из строя очень дорогое оборудование, лишив тем самым диагностики многих пациентов.
    Ответ написан
    Комментировать