« Facade pattern » : différence entre les versions

De Banane Atomic
Aller à la navigationAller à la recherche
(Page créée avec « Category:CSharp Category:Design Patterns = Definition = Provide a unified interface to a set of interfaces in a subsystem.<br> Facade defines a higher-level interf… »)
 
 
(2 versions intermédiaires par le même utilisateur non affichées)
Ligne 4 : Ligne 4 :
Provide a unified interface to a set of interfaces in a subsystem.<br>
Provide a unified interface to a set of interfaces in a subsystem.<br>
Facade defines a higher-level interface that makes the subsystem easier to use.
Facade defines a higher-level interface that makes the subsystem easier to use.
* Reorganize a system with many subsystems into identifiable layers with single entry points
* Simplify the interface to a complex subsystem


= Exemple =
= Exemple =
<filebox fn='User.cs'>
public class User
{
    public string Name { get; private set; }
    public User(string name)
    {
        Name = name;
    }
}
</filebox>
<filebox fn='Group.cs'>
public class Group
{
    public string Name { get; private set; }
    public ICollection<User> Users { get; private set; }
    public Group(string name)
    {
        Name = name;
        Users = new List<User>();
    }
}
</filebox>
<filebox fn='UserService.cs'>
public class UserService
{
    public User CreateUser(string userName) => new User(userName);
}
</filebox>
<filebox fn='GroupService.cs'>
public class GroupService
{
    IDictionary<string, Group> groupsByName;
    public void AddUserIntoGroup(User user, Group group)
    {
        group.Users.Add(user);
    }
    public Group GetByName(string groupName)
        => groupsByName.TryGetValue(groupName, out var group) ? group : null;
}
</filebox>
<filebox fn='UserGroupFacade.cs'>
public class UserGroupFacade
{
    UserService userService;
    GroupService groupService;
    public UserGroupFacade(UserService userService, GroupService groupService)
    {
        this.userService = userService;
        this.groupService = groupService;
    }
    public void CreateAdminUser(string userName)
    {
        var user = userService.CreateUser(userName);
        var adminGroup = groupService.GetByName("Admin");
        groupService.AddUserIntoGroup(user, adminGroup);
    }
}
</filebox>
<kode lang='cs'>
var userService = new UserService();
var groupService = new GroupService();
var userGroupFacade = new UserGroupFacade(userService, groupService);
// create an admin user in 1 call instead of havind to call UserService.CreateUser + GroupService.GetByName + GroupService.AddUserIntoGroup
userGroupFacade.CreateAdminUser("Nicolas");
</kode>

Dernière version du 7 juin 2020 à 22:45

Definition

Provide a unified interface to a set of interfaces in a subsystem.
Facade defines a higher-level interface that makes the subsystem easier to use.

  • Reorganize a system with many subsystems into identifiable layers with single entry points
  • Simplify the interface to a complex subsystem

Exemple

User.cs
public class User
{
    public string Name { get; private set; }

    public User(string name)
    {
        Name = name;
    }
}
Group.cs
public class Group
{
    public string Name { get; private set; }

    public ICollection<User> Users { get; private set; }

    public Group(string name)
    {
        Name = name;
        Users = new List<User>();
    }
}
UserService.cs
public class UserService
{
    public User CreateUser(string userName) => new User(userName);
}
GroupService.cs
public class GroupService
{
    IDictionary<string, Group> groupsByName;

    public void AddUserIntoGroup(User user, Group group)
    {
        group.Users.Add(user);
    }

    public Group GetByName(string groupName)
        => groupsByName.TryGetValue(groupName, out var group) ? group : null;
}
UserGroupFacade.cs
public class UserGroupFacade
{
    UserService userService;
    GroupService groupService;

    public UserGroupFacade(UserService userService, GroupService groupService)
    {
        this.userService = userService;
        this.groupService = groupService;
    }

    public void CreateAdminUser(string userName)
    {
        var user = userService.CreateUser(userName);
        var adminGroup = groupService.GetByName("Admin");
        groupService.AddUserIntoGroup(user, adminGroup);
    }
}
Cs.svg
var userService = new UserService();
var groupService = new GroupService();

var userGroupFacade = new UserGroupFacade(userService, groupService);
// create an admin user in 1 call instead of havind to call UserService.CreateUser + GroupService.GetByName + GroupService.AddUserIntoGroup
userGroupFacade.CreateAdminUser("Nicolas");