The Data Mapper pattern is a software design pattern used in ORM (object-relational mapping) to separate the DAL (data access layer) from the BLL (business logic layer). It allows the two layers to evolve independently of each other, making it easier to maintain and modify the codebase over time.
It is implemented using the mapper class that converts data between the domain objects in the BLL and the database objects in the DAL. The mapper class is responsible for querying the database, creating and updating objects, and mapping data between the two layers.
Example for implementation:-
Following is a domain object named User with the following properties:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}
To implement the Data Mapper pattern, you would need to create a separate class named UserMapper in the DAL that maps the User object to the database table.
public class UserMapper
{
private readonly IDbConnection _dbConnection;
public UserMapper(IDbConnection dbConnection)
{
_dbConnection = dbConnection;
}
public User GetById(int id)
{
var sql = "SELECT * FROM users WHERE id = @id";
var parameters = new { id };
var user = _dbConnection.QuerySingleOrDefault
return user;
}
public void Insert(User user)
{
var sql = "INSERT INTO users (name, email) VALUES (@Name, @Email)";
_dbConnection.Execute(sql, user);
}
public void Update(User user)
{
var sql = "UPDATE users SET name = @Name, email = @Email WHERE id = @Id";
_dbConnection.Execute(sql, user);
}
public void Delete(int id)
{
var sql = "DELETE FROM users WHERE id = @id";
var parameters = new { id };
_dbConnection.Execute(sql, parameters);
}
}
In this example, the UserMapper class takes an IDbConnection object in its constructor, which is used to interact with the database. The GetById, Insert, Update, and Delete methods are responsible for performing CRUD operations on the user’s table in the database.
In the BLL, you can use the UserMapper to interact with the database without directly referencing the database connection. Here’s an example of how you might use the UserMapper in the BLL:
public class UserService
{
private readonly UserMapper _userMapper;
public UserService(UserMapper userMapper)
{
_userMapper = userMapper;
}
public User GetUserById(int id)
{
return _userMapper.GetById(id);
}
public void CreateUser(User user)
{
_userMapper.Insert(user);
}
public void UpdateUser(User user)
{
_userMapper.Update(user);
}
public void DeleteUser(int id)
{
_userMapper.Delete(id);
}
}
In this example, the UserService class takes a UserMapper object in its constructor, which is used to perform data access operations on the User object. The GetUserById, CreateUser, UpdateUser, and DeleteUser methods are responsible for interacting with the UserMapper to perform CRUD operations on the User object.
By using the Data Mapper pattern, the BLL is decoupled from the DAL, making it easier to maintain and modify
If you have skills in PHP programming and you want to enhance your career in this field, a PHP certification from StudySection can help you reach your desired goals. Both beginner level and expert level PHP Certification Exams are offered by StudySection along with other programming certification exams.