Кирилл Корняков (Intel, ННГУ)
Антон Бевзюк (Додо Пицца)
Сентябрь 2018
Технический долг (также известный как долг кодинга) — это метафора Программной инженерии, обозначающая накопленные в программном коде или архитектуре проблемы, связанные с пренебрежением к качеству при разработке ПО и вызывающие дополнительные затраты труда в будущем.
Wikipedia
|
Инженерные практики:
Изменение внутренней структуры программы
без изменений ее видимого поведения
с целью облегчить понимание и удешевить модификацию.
М. Фаулер
Мартин Фаулер |
Кент Бек |
Метафоры указывают на необходимость непрерывной работы по поддержанию кода в чистоте! - Роберт Мартин: правило бойскаута, уборка посуды - Энди Хант и Дейв Томас: теория разбитых окон (из криминологии)
"Совершенный код" С. Макконнелл
"Совершенный код" С. Макконнелл
[TestMethod]
public void FetchUsingCreatedBySpecification() {
var user1 = new User(new Distributor("", "2"));
var user2 = new User(new Distributor("", "3"));
var user3 = new User("", "3", Role.Administrator);
var distributor1 = new Distributor { CreatedBy = user1 };
var distributor2 = new Distributor { CreatedBy = user2 };
var distributor3 = new Distributor { CreatedBy = user3 };
var specification = new CreatedBy<Distributor>(user1);
Assert.IsTrue(specification.IsSatisfiedBy(distributor1));
Assert.IsFalse(specification.IsSatisfiedBy(distributor2));
Assert.IsFalse(specification.IsSatisfiedBy(distributor3));
}
[TestMethod]
public void FetchUsingCreatedBySpecification() {
var john = new User(new Distributor("", "john"));
var mike = new User(new Distributor("", "mike"));
var bob = new User("", "bob", Role.Administrator);
var sonOfJohn = new Distributor {CreatedBy = john};
var sonOfMike = new Distributor {CreatedBy = mike};
var daughterOfBob = new Distributor {CreatedBy = bob};
var createdByJohn = new CreatedBy<Distributor>(john);
Assert.IsTrue(createdByJohn.IsSatisfiedBy(sonOfJohn));
Assert.IsFalse(createdByJohn.IsSatisfiedBy(sonOfMike));
Assert.IsFalse(createdByJohn.IsSatisfiedBy(daughterOfBob));
}
new DateTime(2009, 11, 12)
public static DateTime of2009(this double ddMM) {
var day = (int) Math.Round(ddMM, 0);
var month = (int) Math.Round(ddMM*100, 0) - day * 100;
return new DateTime(2009, month, day);
}
12.11.of2009();
var month = new CalendarMonth(2009, 10);
var month = Oct.of2009();
internal static class Oct {
public static CalendarMonth of2009 {
get { return new CalendarMonth(2009, 10); }
}
}
var customer = new Customer();
customer.Name = "Vasya Pupkin";
var order = new Order();
order.Customer = customer;
order.Date = new DateTime(2009, 10, 11);
var orderItem = new orderItem();
orderItem.Product = new Product("Lays");
orderItem.Amount = 3;
orderItem.Price = 45.30;
order.Items.Add(orderItem);
orderItem.Product = new Product("Beer");
orderItem.Amount = 3;
orderItam.Price = 20.50;
order.Items.Add(orderItem)
var order = new OrderBuilder()
.WithCustomer(“Vasya Pupkin”)
.WithDate(11.10.of2009())
.WithLineItem()
.WithProduct(“Lays”)
.WithAmount(3)
.WithPrice(45.30)
.WithLineItem()
.WithProduct(“Beer”)
.WithAmount(3)
.WithPrice(20.50)
.GetResult();
Вопросы?