SlideShare a Scribd company logo
1 of 13
Ajouter des interfaces
« fluent » à vos classes .Net
Eric Moreau, MVP
Moer inc.
eric@moer.ca
www.moer.ca
Interfaces « Fluent »
• Terme viendrait de Eric Evans et Martin Fowler
• Définition Wikipédia
• « implementation of an object oriented API that aims to provide more
readable code »
• « normally implemented by using method cascading (concretely method
chaining) to relay the instruction context of a subsequent call »
Interfaces « Fluent »
• Vous les utilisez déjà depuis longtemps!
• Un premier exemple
Dim s As String = "Eric Moreau"
s = s.Trim()
s = s.ToUpper()
s = s.Replace("R", "z")
string s = "Eric Moreau";
s = s.Trim();
s = s.ToUpper();
s = s.Replace("R", "z");
Dim s2 As String = "Eric Moreau".
Trim().
ToUpper().
Replace("R", "z")
string s2 = "Eric Moreau".
Trim().
ToUpper().
Replace("R", "z");
Interfaces « Fluent »
• LINQ est « fluent » depuis le début
• Voici un 2e exemple
Dim fileList = dir.
GetFiles("*.*").
Where(Function(f) f.Name.StartsWith("odbc")).
OrderBy(Function(f) f.FullName)
var fileList = dir.
GetFiles("*.*").
Where(f=> f.Name.StartsWith("odbc")).
OrderBy(f => f.FullName);
Interfaces « Fluent » - Alternatives
• Object Initializer
• Propriétés seulement
• À l’initialisation seulement
• With … End With (VB only)
• Semble similaire
• Vraiment pas « fluent »
Dim emp2 As Employee = New Employee With {
.Name = "Eric Moreau",
.Dob = New DateTime(1970, 5, 28),
.HireDate = New DateTime(2007, 2, 1),
.Salary = 123456,
.BossName = "Pointy-Haired Boss"
}
Dim emp3 As Employee = New Employee
With emp3
.Name = "Eric Moreau"
.Dob = New DateTime(1970, 5, 28)
.HireDate = New DateTime(2007, 2, 1)
.Salary = 123456
.BossName = "Pointy-Haired Boss"
End With
Interfaces « Fluent » - Ma recette
• Ma recette s’intègre à une classe qui existe déjà sans changer son
comportement actuel
• Étape 1 – Partez d’une classe régulière
Public Name As String
Public Dob As Date
Public HireDate As Date
Public Salary As Int32
Public BossName As String
Interfaces « Fluent » - Ma recette
• Étape 2 – Créez une interface (fonction retourne interface)
Public Interface IEmployeeFluent
Function OfName(ByVal pName As String) As IEmployeeFluent
Function AsOf(ByVal pDate As Date) As IEmployeeFluent
Function BornOn(ByVal pDate As Date) As IEmployeeFluent
Function SetSalary(ByVal pSalary As Int32) As IEmployeeFluent
Function ReportTo(ByVal pName As String) As IEmployeeFluent
End Interface
Interfaces « Fluent » - Ma recette
• Étape 3 – Implémentez l’interface
Public Function OfName(ByVal pName As String) As IEmployeeFluent Implements IEmployeeFluent.OfName
Name = pName
Return Me
End Function
Public Function AsOf(ByVal pDate As Date) As IEmployeeFluent Implements IEmployeeFluent.AsOf
HireDate = pDate
Return Me
End Function
Public Function BornOn(ByVal pDate As Date) As IEmployeeFluent Implements IEmployeeFluent.BornOn
DOB = pDate
Return Me
End Function
…
Interfaces « Fluent » - Ma recette
• Étape 4 – Utilisez
Dim emp2 As IEmployeeFluent = New Employee()
MessageBox.Show(emp2.
OfName("Eric Moreau").
AsOf(New DateTime(2007, 2, 1)).
BornOn(New DateTime(1970, 5, 28)).
SetSalary(123456).
ReportTo("Pointy-Haired Boss").
ToString())
Interfaces « Fluent » - Ma recette
• Mais d’habitude on n’aime même pas créer une instance
• On ajoute donc une méthode d’initialisation à notre objet
Public Shared Function Hire() As IEmployeeFluent
Return New Employee
End Function
Interfaces « Fluent » - Ma recette
• Utilisez la méthode d’initialisation
Dim emp As IEmployeeFluent = Employee.Hire().
OfName("Eric Moreau").
AsOf(New DateTime(2007, 2, 1)).
BornOn(New DateTime(1970, 5, 28)).
SetSalary(123456).
ReportTo("Pointy-Haired Boss")
MessageBox.Show(emp.ToString())
En conclusion
• Simple
• Meilleure expérience d’utilisation
• « fit » bien avec les nouveaux APIs comme LINQ
• Article de mars 2014
• http://emoreau.com/Entries/Articles/2014/03/Net-fluent-interface.aspx
Ajouter des interfaces
« fluent » à vos classes .Net
Eric Moreau, MVP
Moer inc.
eric@moer.ca
www.moer.ca

More Related Content

Viewers also liked

AIDES A L'HABITAT
AIDES A L'HABITATAIDES A L'HABITAT
AIDES A L'HABITATJo Anis
 
Dp b&c summit
Dp b&c summitDp b&c summit
Dp b&c summitRAC-F
 
PowerShell - NIk Charlebois
PowerShell - NIk CharleboisPowerShell - NIk Charlebois
PowerShell - NIk CharleboisMSDEVMTL
 
Présentation phytofar local phyto 12092012
Présentation phytofar local phyto 12092012Présentation phytofar local phyto 12092012
Présentation phytofar local phyto 12092012Phytofar mobile
 
Beaumont expo diapo 3
Beaumont expo diapo 3Beaumont expo diapo 3
Beaumont expo diapo 3regiskalou
 
Programme 4 jours a seville, decouvrez le coeur de la culture flamenco
Programme 4 jours a seville, decouvrez le coeur de la culture flamencoProgramme 4 jours a seville, decouvrez le coeur de la culture flamenco
Programme 4 jours a seville, decouvrez le coeur de la culture flamencoRTAdmcSPAIN
 
Note de décryptage odd et climat vfinale
Note de décryptage odd et climat vfinaleNote de décryptage odd et climat vfinale
Note de décryptage odd et climat vfinaleRAC-F
 
Tothom és igual davant la crisi?
Tothom és igual davant la crisi?Tothom és igual davant la crisi?
Tothom és igual davant la crisi?OtmanEzennane
 
Dossier de Presse - H&C
Dossier de Presse - H&CDossier de Presse - H&C
Dossier de Presse - H&CRaphael Coezy
 

Viewers also liked (15)

AIDES A L'HABITAT
AIDES A L'HABITATAIDES A L'HABITAT
AIDES A L'HABITAT
 
C.k.f.c. opti
C.k.f.c. optiC.k.f.c. opti
C.k.f.c. opti
 
A fond la pêche avec un bon p'tit déj'
A fond la pêche avec un bon p'tit déj'A fond la pêche avec un bon p'tit déj'
A fond la pêche avec un bon p'tit déj'
 
Dp b&c summit
Dp b&c summitDp b&c summit
Dp b&c summit
 
PowerShell - NIk Charlebois
PowerShell - NIk CharleboisPowerShell - NIk Charlebois
PowerShell - NIk Charlebois
 
23 apr-june 1997
23 apr-june 199723 apr-june 1997
23 apr-june 1997
 
Présentation phytofar local phyto 12092012
Présentation phytofar local phyto 12092012Présentation phytofar local phyto 12092012
Présentation phytofar local phyto 12092012
 
Par#12
Par#12Par#12
Par#12
 
Beaumont expo diapo 3
Beaumont expo diapo 3Beaumont expo diapo 3
Beaumont expo diapo 3
 
Programme 4 jours a seville, decouvrez le coeur de la culture flamenco
Programme 4 jours a seville, decouvrez le coeur de la culture flamencoProgramme 4 jours a seville, decouvrez le coeur de la culture flamenco
Programme 4 jours a seville, decouvrez le coeur de la culture flamenco
 
Note de décryptage odd et climat vfinale
Note de décryptage odd et climat vfinaleNote de décryptage odd et climat vfinale
Note de décryptage odd et climat vfinale
 
Exp2 g rivoal_open_data
Exp2 g rivoal_open_dataExp2 g rivoal_open_data
Exp2 g rivoal_open_data
 
Pr rooms
Pr roomsPr rooms
Pr rooms
 
Tothom és igual davant la crisi?
Tothom és igual davant la crisi?Tothom és igual davant la crisi?
Tothom és igual davant la crisi?
 
Dossier de Presse - H&C
Dossier de Presse - H&CDossier de Presse - H&C
Dossier de Presse - H&C
 

Similar to Eric Moreau: Fluent interfaces

Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de donnéesISIG
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de donnéesISIG
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDidier Plaindoux
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communautéMickaël Rémond
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniShellmates
 
Les fondamentaux de langage C#
Les fondamentaux de langage C#Les fondamentaux de langage C#
Les fondamentaux de langage C#Youness Boukouchi
 
Seance 3- Programmation en langage C
Seance 3- Programmation en langage C Seance 3- Programmation en langage C
Seance 3- Programmation en langage C Fahad Golra
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web5pidou
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSSAyoubElmrabet6
 
Introduction au langage Ruby
Introduction au langage RubyIntroduction au langage Ruby
Introduction au langage RubyJulien Blin
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronestchappui
 
Langage de Programmation.pdf
Langage de Programmation.pdfLangage de Programmation.pdf
Langage de Programmation.pdfAboubacarDiarra10
 
Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojurelolopetit
 

Similar to Eric Moreau: Fluent interfaces (20)

Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de données
 
Environnement de développement de bases de données
Environnement de développement de bases de donnéesEnvironnement de développement de bases de données
Environnement de développement de bases de données
 
De java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvementsDe java à swift en 2 temps trois mouvements
De java à swift en 2 temps trois mouvements
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
 
Les fondamentaux de langage C#
Les fondamentaux de langage C#Les fondamentaux de langage C#
Les fondamentaux de langage C#
 
Spring 3.0
Spring 3.0Spring 3.0
Spring 3.0
 
Cours de Génie Logiciel / ESIEA 2013-2014
Cours de Génie Logiciel / ESIEA 2013-2014 Cours de Génie Logiciel / ESIEA 2013-2014
Cours de Génie Logiciel / ESIEA 2013-2014
 
Change mind about JS
Change mind about JSChange mind about JS
Change mind about JS
 
Seance 3- Programmation en langage C
Seance 3- Programmation en langage C Seance 3- Programmation en langage C
Seance 3- Programmation en langage C
 
Quelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application webQuelle place pour le framework Rails dans le développement d'application web
Quelle place pour le framework Rails dans le développement d'application web
 
02 Spécificité du C++ COURS SYS SYSSSSSS
02 Spécificité du C++  COURS SYS SYSSSSSS02 Spécificité du C++  COURS SYS SYSSSSSS
02 Spécificité du C++ COURS SYS SYSSSSSS
 
C# 7 - Nouveautés
C# 7 - NouveautésC# 7 - Nouveautés
C# 7 - Nouveautés
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
Introduction au langage Ruby
Introduction au langage RubyIntroduction au langage Ruby
Introduction au langage Ruby
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
 
Cours de Génie Logiciel / ESIEA 2016-17
Cours de Génie Logiciel / ESIEA 2016-17Cours de Génie Logiciel / ESIEA 2016-17
Cours de Génie Logiciel / ESIEA 2016-17
 
Langage de Programmation.pdf
Langage de Programmation.pdfLangage de Programmation.pdf
Langage de Programmation.pdf
 
Mix it 2011 - Clojure
Mix it 2011 - ClojureMix it 2011 - Clojure
Mix it 2011 - Clojure
 
Cours php
Cours phpCours php
Cours php
 

More from MSDEVMTL

Intro grpc.net
Intro  grpc.netIntro  grpc.net
Intro grpc.netMSDEVMTL
 
Grpc and asp.net partie 2
Grpc and asp.net partie 2Grpc and asp.net partie 2
Grpc and asp.net partie 2MSDEVMTL
 
Property based testing
Property based testingProperty based testing
Property based testingMSDEVMTL
 
Improve cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureImprove cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureMSDEVMTL
 
Return on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataReturn on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataMSDEVMTL
 
C sharp 8.0 new features
C sharp 8.0 new featuresC sharp 8.0 new features
C sharp 8.0 new featuresMSDEVMTL
 
Asp.net core 3
Asp.net core 3Asp.net core 3
Asp.net core 3MSDEVMTL
 
MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcoreMSDEVMTL
 
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
Groupe Excel et Power BI  - Rencontre du 25 septembre 2018Groupe Excel et Power BI  - Rencontre du 25 septembre 2018
Groupe Excel et Power BI - Rencontre du 25 septembre 2018MSDEVMTL
 
Api gateway
Api gatewayApi gateway
Api gatewayMSDEVMTL
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcoreMSDEVMTL
 
Stephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsStephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsMSDEVMTL
 
Eric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureEric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureMSDEVMTL
 
Data science presentation
Data science presentationData science presentation
Data science presentationMSDEVMTL
 
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...MSDEVMTL
 
Open id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreOpen id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreMSDEVMTL
 
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsYoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsMSDEVMTL
 
CAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageCAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageMSDEVMTL
 
CAE: etude de cas
CAE: etude de casCAE: etude de cas
CAE: etude de casMSDEVMTL
 

More from MSDEVMTL (20)

Intro grpc.net
Intro  grpc.netIntro  grpc.net
Intro grpc.net
 
Grpc and asp.net partie 2
Grpc and asp.net partie 2Grpc and asp.net partie 2
Grpc and asp.net partie 2
 
Property based testing
Property based testingProperty based testing
Property based testing
 
Improve cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft AzureImprove cloud visibility and cost in Microsoft Azure
Improve cloud visibility and cost in Microsoft Azure
 
Return on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & DataReturn on Ignite 2019: Azure, .NET, A.I. & Data
Return on Ignite 2019: Azure, .NET, A.I. & Data
 
C sharp 8.0 new features
C sharp 8.0 new featuresC sharp 8.0 new features
C sharp 8.0 new features
 
Asp.net core 3
Asp.net core 3Asp.net core 3
Asp.net core 3
 
MSDEVMTL Informations 2019
MSDEVMTL Informations 2019MSDEVMTL Informations 2019
MSDEVMTL Informations 2019
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
 
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
Groupe Excel et Power BI  - Rencontre du 25 septembre 2018Groupe Excel et Power BI  - Rencontre du 25 septembre 2018
Groupe Excel et Power BI - Rencontre du 25 septembre 2018
 
Api gateway
Api gatewayApi gateway
Api gateway
 
Common features in webapi aspnetcore
Common features in webapi aspnetcoreCommon features in webapi aspnetcore
Common features in webapi aspnetcore
 
Stephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environmentsStephane Lapointe: Governance in Azure, keep control of your environments
Stephane Lapointe: Governance in Azure, keep control of your environments
 
Eric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts AzureEric Routhier: Garder le contrôle sur vos coûts Azure
Eric Routhier: Garder le contrôle sur vos coûts Azure
 
Data science presentation
Data science presentationData science presentation
Data science presentation
 
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
Michel Ouellette + Gabriel Lainesse: Process Automation & Data Analytics at S...
 
Open id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api coreOpen id connect, azure ad, angular 5, web api core
Open id connect, azure ad, angular 5, web api core
 
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analyticsYoann Clombe : Fail fast, iterate quickly with power bi and google analytics
Yoann Clombe : Fail fast, iterate quickly with power bi and google analytics
 
CAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling AverageCAE: etude de cas - Rolling Average
CAE: etude de cas - Rolling Average
 
CAE: etude de cas
CAE: etude de casCAE: etude de cas
CAE: etude de cas
 

Eric Moreau: Fluent interfaces

  • 1. Ajouter des interfaces « fluent » à vos classes .Net Eric Moreau, MVP Moer inc. eric@moer.ca www.moer.ca
  • 2. Interfaces « Fluent » • Terme viendrait de Eric Evans et Martin Fowler • Définition Wikipédia • « implementation of an object oriented API that aims to provide more readable code » • « normally implemented by using method cascading (concretely method chaining) to relay the instruction context of a subsequent call »
  • 3. Interfaces « Fluent » • Vous les utilisez déjà depuis longtemps! • Un premier exemple Dim s As String = "Eric Moreau" s = s.Trim() s = s.ToUpper() s = s.Replace("R", "z") string s = "Eric Moreau"; s = s.Trim(); s = s.ToUpper(); s = s.Replace("R", "z"); Dim s2 As String = "Eric Moreau". Trim(). ToUpper(). Replace("R", "z") string s2 = "Eric Moreau". Trim(). ToUpper(). Replace("R", "z");
  • 4. Interfaces « Fluent » • LINQ est « fluent » depuis le début • Voici un 2e exemple Dim fileList = dir. GetFiles("*.*"). Where(Function(f) f.Name.StartsWith("odbc")). OrderBy(Function(f) f.FullName) var fileList = dir. GetFiles("*.*"). Where(f=> f.Name.StartsWith("odbc")). OrderBy(f => f.FullName);
  • 5. Interfaces « Fluent » - Alternatives • Object Initializer • Propriétés seulement • À l’initialisation seulement • With … End With (VB only) • Semble similaire • Vraiment pas « fluent » Dim emp2 As Employee = New Employee With { .Name = "Eric Moreau", .Dob = New DateTime(1970, 5, 28), .HireDate = New DateTime(2007, 2, 1), .Salary = 123456, .BossName = "Pointy-Haired Boss" } Dim emp3 As Employee = New Employee With emp3 .Name = "Eric Moreau" .Dob = New DateTime(1970, 5, 28) .HireDate = New DateTime(2007, 2, 1) .Salary = 123456 .BossName = "Pointy-Haired Boss" End With
  • 6. Interfaces « Fluent » - Ma recette • Ma recette s’intègre à une classe qui existe déjà sans changer son comportement actuel • Étape 1 – Partez d’une classe régulière Public Name As String Public Dob As Date Public HireDate As Date Public Salary As Int32 Public BossName As String
  • 7. Interfaces « Fluent » - Ma recette • Étape 2 – Créez une interface (fonction retourne interface) Public Interface IEmployeeFluent Function OfName(ByVal pName As String) As IEmployeeFluent Function AsOf(ByVal pDate As Date) As IEmployeeFluent Function BornOn(ByVal pDate As Date) As IEmployeeFluent Function SetSalary(ByVal pSalary As Int32) As IEmployeeFluent Function ReportTo(ByVal pName As String) As IEmployeeFluent End Interface
  • 8. Interfaces « Fluent » - Ma recette • Étape 3 – Implémentez l’interface Public Function OfName(ByVal pName As String) As IEmployeeFluent Implements IEmployeeFluent.OfName Name = pName Return Me End Function Public Function AsOf(ByVal pDate As Date) As IEmployeeFluent Implements IEmployeeFluent.AsOf HireDate = pDate Return Me End Function Public Function BornOn(ByVal pDate As Date) As IEmployeeFluent Implements IEmployeeFluent.BornOn DOB = pDate Return Me End Function …
  • 9. Interfaces « Fluent » - Ma recette • Étape 4 – Utilisez Dim emp2 As IEmployeeFluent = New Employee() MessageBox.Show(emp2. OfName("Eric Moreau"). AsOf(New DateTime(2007, 2, 1)). BornOn(New DateTime(1970, 5, 28)). SetSalary(123456). ReportTo("Pointy-Haired Boss"). ToString())
  • 10. Interfaces « Fluent » - Ma recette • Mais d’habitude on n’aime même pas créer une instance • On ajoute donc une méthode d’initialisation à notre objet Public Shared Function Hire() As IEmployeeFluent Return New Employee End Function
  • 11. Interfaces « Fluent » - Ma recette • Utilisez la méthode d’initialisation Dim emp As IEmployeeFluent = Employee.Hire(). OfName("Eric Moreau"). AsOf(New DateTime(2007, 2, 1)). BornOn(New DateTime(1970, 5, 28)). SetSalary(123456). ReportTo("Pointy-Haired Boss") MessageBox.Show(emp.ToString())
  • 12. En conclusion • Simple • Meilleure expérience d’utilisation • « fit » bien avec les nouveaux APIs comme LINQ • Article de mars 2014 • http://emoreau.com/Entries/Articles/2014/03/Net-fluent-interface.aspx
  • 13. Ajouter des interfaces « fluent » à vos classes .Net Eric Moreau, MVP Moer inc. eric@moer.ca www.moer.ca