- Почему глобальные объекты и статика — это зло? Можете показать на примере кода?
- Расскажите об инверсии управления и как она улучшает организацию кода.
- Закон Деметры (Принцип минимальной информированности) гласит, что каждый программный модуль должен обладать ограниченным знанием о других модулях и должен взаимодействовать только с непосредственными «друзьями» (иногда его формулируют как «Не разговаривай с незнакомцами»). Можете написать код, который нарушает этот принцип? Почему у него плохая организация и как её исправить?
- Active-Record — шаблон проектирования, который поощряет внедрение в сам объект функций, таких как Insert, Update и Delete, и свойств, которые соответствуют столбцам некоей базовой таблицы в базе данных. По вашему мнению и опыту, какие ограничения и подводные камни у этого шаблона?
- Data-Mapper — шаблон проектирования, который поощряет использование слоя преобразователей (mappers), перемещающих данные между объектами и базой данных, в то же
class StoreSerializer < ActiveModel::Serializer | |
attributes :id, :name, :logo, :about, :lat, :lng, :facebook_link, :twitter_link, :instagram_link, :pinterest_link, :youtube_link, | |
:address, :country, :state, :city, :zip, :email, :website, :work_time, :phone, :assign_admins, | |
:loyalty_cards_count, :balance, :reviews_count, :average, :paid, :slides, :pictures, :resipient_pop_up, :reward_bonus, :review_bonus, :front_badge_template, :tag_list, :price_range | |
belongs_to :category | |
has_many :menus | |
has_many :services | |
has_one :store_referral | |
has_one :company |
"Эта история случилась с моим школьным приятелем Алексеем. Она произошла когда порядка не было на жд вокзалах и аэропортах. Алексей спокойно ждал пересадку в зале ожидания. Ожидать было недолго - 18 часов. Он развлекал себя как мог - собирался на второй раз перечитывать шедевр литературной мысли из серии «Я вор в законе», как вдруг увидел, как цыгане разводят такого же мужичка-путешественника. | |
Алексей подошёл поближе к этой компании и ему стало слышно обрывки фраз: «на тебе смертельная порча», «нужно срочно снимать», «все умрут», «нужны деньги или золото». Было видно, что бедный мужик под гипнозом, самая говорливая цыганка водила ему по лицу пером и что-то бубнила. Остальные 5-6 создавали фон. Мужик полез за кошельком. Алексею представил себя без денег в другом городе и ринулся защищать невменяемого. | |
- Товарищи цыгане, гражданин со мной, нам пора идти, - он взял несчастного мужичка под гипнозом за локоть и повёл в сторону. Тут же он ощутил, что его оттаскивают за шкирку. Он обернулся, сзади него стоял больш |
Задача | |
В рамках тестового задания предлагается реализовать rest сервис на Ruby/Elixir, который позволит просматривать список репозиториев пользователей github.com, а так же коммиты в конкретном репозитории. | |
В качестве тестовых данных можно использовать имя пользователя matz и его репозиторий streem. | |
Требования к реализации | |
• Реализовать приложение с помощью Ruby/Elixir |
module A | |
def initialize | |
puts 'A' | |
end | |
end | |
module B | |
def initialize | |
puts 'B' | |
super |
def check(str1, str2) | |
str1.reverse == str2 | |
# str1[0] # D | |
# str2[-1] # D | |
# str1[1] # D | |
# str2[-2] # D | |
# str1[2] # D | |
# str2[-3] # D |
<%= form_for :member, url: new_member_business_role_path do |f| %> | |
<%= field_set_tag "Проекты", class: 'projects_fieldset' do %> | |
<% if @user.members.where(business_role_id: nil).empty? %> | |
<p>У данного пользователя нет свободных проектов для создания бизнес-роли!</p> | |
<% else %> | |
<% @user.members.includes(:project).where(business_role_id: nil).each do |member| %> | |
<label> | |
<%= f.check_box :project_ids, {multiple: true}, member.project.id, include_hidden: false %> | |
<%= member.project.name %> | |
</label> |
# Redmine - project management software | |
# Copyright (C) 2006-2015 Jean-Philippe Lang | |
# | |
# This program is free software; you can redistribute it and/or | |
# modify it under the terms of the GNU General Public License | |
# as published by the Free Software Foundation; either version 2 | |
# of the License, or (at your option) any later version. | |
# | |
# This program is distributed in the hope that it will be useful, | |
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
=Navigating= | |
visit('/projects') | |
visit(post_comments_path(post)) | |
=Clicking links and buttons= | |
click_link('id-of-link') | |
click_link('Link Text') | |
click_button('Save') | |
click('Link Text') # Click either a link or a button | |
click('Button Value') |
Английская версия: https://evilmartians.com/chronicles/bootstrap-an-intervention
У CSS есть несколько базовых проблем, которые позволяют очень быстро отстрелить себе ногу при неправильном использовании:
-
Глобальный неймспейс – в серверном программировании все что написано в файле, в файле и остается. Все же что написано в css и js засирает глобальное пространство имен со всеми вытекающими. В JS эту проблему сейчас побороли всякими модульными системами, а вот с css сложнее. В идеальном мире это должен починить Shadow DOM и настоящие Web Components, но пока их нет единственный способ с этим бороться – следовать какой-то системе именований селекторов, которая по возможности уменьшает и исключает возможные конфликты.
-
Каскадность – если на один элемент может сработать несколько правил, то они все и сработают последовательно. Если есть элемент
h1.title
, на него сработают все правила для теговh1
и все правила для класса.title
. Так как весь html состоит из тегов, то правил которые п