Sto lavorando con Visual Studio. La soluzione contiene i seguenti 4 progetti:
DAL
Funziona con Entity framework + Pattern di repository. Contiene le classi DB + Repositorys.
BLL
Contiene le classi DTO + Servizi. I servizi associano le classi DTO alle classi DB. Fa riferimento al progetto DAL.
IMessageRepository messageRepo;
public MessageService()
{
this.messageRepo = new MessageRepository();
AutoMapper.Mapper.Initialize(cfg => cfg.AddProfile<AutoMapperProfile>());
}
public MessageService(IMessageRepository repo)
{
this.messageRepo = repo;
AutoMapper.Mapper.Initialize(cfg => cfg.AddProfile<AutoMapperProfile>());
}
public List<DTO.Message> GetAll()
{
List<DTO.Message> messages = ((System.Linq.IQueryable<DAL.Message>)messageRepo.GetAll()).ProjectTo<DTO.Message>().ToList();
return messages;
}
Presentazione
Fa riferimento al progetto BLL e a EntityFramework.SqlServer.dll.
MessageService ms = new MessageService();
List<Message> messages = ms.GetAll();
Bonus: test unitari
Fa riferimento al progetto BLL e al progetto DAL (deride i repositorys)
[TestClass]
public class MessageServiceTest
{
Mock<IMessageRepository> messageRepo;
MessageService messageService;
[TestInitialize]
public void SetUp()
{
// Create a new mock of the repository
messageRepo = new Mock<IMessageRepository>();
// Set up the mock for the repository
messageRepo.Setup(x => x.GetAll()).Returns((new List<DAL.Message>
{
new DAL.Message { Id = 1, Content = "Hello world!", Date = DateTime.Now },
new DAL.Message { Id = 2, Content = "I <3 U!", Date = DateTime.Now }
}).AsQueryable());
// Create the service and inject the repository into the service
messageService = new MessageService(messageRepo.Object);
}
[TestMethod]
public void TestGetAll()
{
// Act
var messages = messageService.GetAll();
// Assert
Assert.AreEqual(2, messages.Count, "The messages count is not correct");
}
}
Sono nuovo nell'architettura del software. Quali sono i tuoi pensieri su questa architettura? Qualche miglioramento?