Next let's define a few Interfaces:
Now let's create two rudimentary data sources to resemble production and mock scenarios (I'm purposefully skipping any network to avoid any convoluting the examples):
Production data sources:
Mock data sources:
C#:
namespace ReaderMonadDI {
public interface IScholar {
List<Student> Students();
}
public interface IAcademia {
List<Grade> Grades();
}
public interface ISchool {
IScholar Scholar();
IAcademia Academia();
}
}
Now let's create two rudimentary data sources to resemble production and mock scenarios (I'm purposefully skipping any network to avoid any convoluting the examples):
Production data sources:
C#:
namespace ReaderMonadDI {
public class ProdScholar : IScholar {
public List<Student> Students() {
return new List<Student> {
Student.Create("Jack", 1),
Student.Create("John", 2),
Student.Create("Jill", 3),
Student.Create("James", 4),
Student.Create("Jean", 5)
};
}
}
public class ProdAcademia : IAcademia {
public List<Grade> Grades() {
return new List<Grade> {
Grade.Create(1, 2018, Subject.Math, 45),
Grade.Create(1, 2018, Subject.Science, 65),
Grade.Create(1, 2018, Subject.English, 68),
Grade.Create(2, 2018, Subject.Math, 33),
Grade.Create(2, 2018, Subject.Math, 87),
Grade.Create(2, 2018, Subject.English, 43),
Grade.Create(3, 2018, Subject.Science, 71),
Grade.Create(3, 2018, Subject.Math, 76),
Grade.Create(3, 2018, Subject.English, 85),
Grade.Create(4, 2018, Subject.Science, 84),
Grade.Create(4, 2018, Subject.Math, 92),
Grade.Create(4, 2018, Subject.Math, 79),
Grade.Create(5, 2018, Subject.English, 83),
Grade.Create(5, 2018, Subject.Math, 77),
Grade.Create(5, 2018, Subject.Science, 68)
};
}
}
}
Mock data sources:
C#:
namespace ReaderMonadDI {
public class MockScholar : IScholar {
public List<Student> Students() {
return new List<Student> { Student.Create("Test Student", 1) };
}
}
public class MockAcademia : IAcademia {
public List<Grade> Grades() {
return new List<Grade> {
Grade.Create(1, 2018, Subject.Math, 80),
Grade.Create(1, 2018, Subject.Science, 76)
};
}
}
}