2. www.lauragonzafer.com
● Culo inquieto por naturaleza
● Apasionada de los videojuegos
Laura Gonzalez Fernandez
Software Engineer in training at LifullConnect
3. Index of content
Introduction
¿Cual es nuestra Meta?
¿Como lo conseguimos?
Code Smells, Patterns, y demas
familia
Connascene
¿Que significa Connascene?
Que nos aporta
Propiedades
Como Aplicarla
Conclusion
Q&A
Contenidos
4. ¿ Cual es nuestra meta ?
Un código limpio, fácil de entender y
sostenible
10. ¿Que significa Connascence?
Cuando teniendo dos elementos de software A y B cualquier
cambio en A va a requerir que B cambie o incluso que ambos
cambien juntos para seguir funcionando correctamente
18. Varios componentes de una aplicación deben ponerse de
acuerdo en el nombre de una entidad
Name
19. public class Time {
int _hour;
int _minute;
int _second;
public Time(int hour, int minute, int second){
_hour = hour;
_minute = minute;
_second = second;
}
public string Display(){
return _hour + ":" + _minute + ":" + _second + ":";
}
}
20. Varios componentes de una aplicación deben ponerse de
acuerdo en el tipo de una entidad
Type
21. public class Time {
int _hour;
int _minute;
int _second;
public Time(int hour, int minute, int second){
_hour = hour;
_minute = minute;
_second = second;
}
public string Display(){
return _hour + ":" + _minute + ":" + _second + ":";
}
}
22. Dos o más componentes tiene que tener un acuerdo en
el significado de su valor. Es decir que tiene que tener
un significado entendible.
Convention (Meaning)
24. Dos o más componentes usan un mismo algoritmo de
manera individual, por qué lo si este cambia se debe
propagar en todos los componentes
Algorithm
25. public string AddChecksum(string
inputData){
var sum =
SumCharsOf(inputData);
var difference = sum % 10;
return inputData +
difference;
}
public bool Check(string
inputData){
var sum =
SumCharsOf(inputData);
return sum % 10 == 0;
}
public string AddChecksum(string
inputData){
return inputData +
Checksum(inputData);
}
public bool Check(string inputData){
return Checksum(inputData) == 0;
}
private int Checksum(string
inputData){
var sum = SumCharsOf(inputData);
return sum % 10;
}
26. Ocurre cuando en un método añadimos varios
componentes que deben ser adjuntados en un orden
concreto.TIP: Suele estar relacionada con Primitive
obsession
Position
27. public void SendEmail(String recipient, String sender, String message) {
Email email = new Email();
email.To(recipient);
email.From(sender);
email.Body(message);
_smtpService.SendEmail(email);
}
public void SendEmail(Recipient recipient, Sender sender, Message message) {
Email email = new Email();
email.To(recipient.Address);
email.From(sender.Address);
email.Body(message.body);
_smtpService.SendEmail(email);
}
28. La llamada a componentes de una aplicaciones debe tener
un orden concreto que no está registrado explícitamente.
Execution Order
29. public void SendReceipts(){
var receiptSender = new ReceiptSender();
var receiptId = NextUnsentReceiptId();
while(receiptId != null){
receiptSender.SendToCustomer(receiptId);
receiptSender.Archive(receiptId);
receiptId = NextUnsentReceiptID();
}
}
30. Dos o más llamadas depende del tiempo , es decir de
cuando deben ejecutarse.
Timing
31. [TestFixture]
public class
ServiceBusMessageHandler_Should{
var messageHandler = new
MessageHandler();
[Test]
public void
ReceiveMessages(){
var expectedMessage = new
TestMessage();
SendMessageToIntegrationTestBus(expect
edMessage);
Thread.Sleep(1000);
var receivedMessage =
messageHandler.ReadLastMessage();
Assert.That(receivedMessage,
Is.Equal(expectedMessage))
}
[TestFixture]
public class
ServiceBusMessageHandler_Should{
var messageHandler = new
MessageHandler();
[Test]
public void
ReceiveMessages(){
var expectedMessage = new
TestMessage();
SendMessageToIntegrationTestBus(expected
Message);
awaiter.WaitOne(1000);
var receivedMessage =
messageHandler.ReadLastMessage();
Assert.That(receivedMessage,
Is.Equal(expectedMessage))
}
32. Cuando dos o más componentes estar
interrelacionados o tienen un rango de validación que
no se expresa o deja constancia
Value
33. public class Time {
int _hour;
int _minute;
int _second;
public Time(int hour, int minute, int second){
hour = hour;
minute = minute;
second = second;
}
} private void Validate(){
if (_hour < 0 || _hour > 23)
throw new InvalidHourException();
if(_minute < 0 || _minute > 59)
throw new InvalidMinuteException();
if(_second < 0 || _second > 59)
throw new InvalidSecondException();
}
34. Cuando uno o más componentes hacen referencia al
exactamente la misma instancia de otra entidad.
Identity
35. public class GlobalCounter{
int count = 0;
public void Increment(){
count++;
}
public int CurrentCount(){
return count;
}
}
public class Controller{
GlobalCounter _counter;
public Controller(GlobalCounter counter){
_counter = counter;
}
public ActionResult Home(){
_counter.Increment();
}
}