Skip to main content
added 1 character in body
Source Link

Works with Entity framework + Repository pattern. It contains dethe DB classes + Repositorys.

It contains the DTO classes + Services. Services map the DTO classes with the DB classes. It referencereferences the DAL project.

Works with Entity framework + Repository pattern. It contains de DB classes + Repositorys.

It contains the DTO classes + Services. Services map the DTO classes with the DB classes. It reference the DAL project.

Works with Entity framework + Repository pattern. It contains the DB classes + Repositorys.

It contains the DTO classes + Services. Services map the DTO classes with the DB classes. It references the DAL project.

Source Link

Is my three layer architecture well implemented?

I'm working with visual studio. The solution contains the 4 following projetcs :

DAL

Works with Entity framework + Repository pattern. It contains de DB classes + Repositorys.

BLL

It contains the DTO classes + Services. Services map the DTO classes with the DB classes. It reference the DAL project.

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;
}

Presentation

It references the BLL project and EntityFramework.SqlServer.dll.

MessageService ms = new MessageService();
List<Message> messages = ms.GetAll();

Bonus : Unit tests

It references the BLL project and the DAL project (It mocks the 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");
    }
}

I'm new to software architecturing. What are your thoughts on this architecture? Any improvements?