4. User Interface
⢠Telerik Extensions for ASP.NET MVC
â Set of UI controls
â Server and Client side computation/binding
â Based on jQuery
â Extends the MVCâs HTML Helper
⢠Grid
⢠Chart
⢠Splitter & Slider
⢠TreeView
⢠âŚ
BEXIS Tech Talk #4: The 3rd Party Libraries 4
5. User Interface->Telerik
⢠Telerik Extensions for ASP.NET MVC
â Set of UI controls
â Server and Client side computation/binding
â Based on jQuery
â Extends the MVCâs HTML Helper
⢠Grid
⢠Chart
⢠Splitter & Slider
⢠TreeView
⢠âŚ
BEXIS Tech Talk #4: The 3rd Party Libraries 5
6. User Interface->Telerik
@(Html.Telerik().Grid(Model.Data).Name("PrimaryDataResultGrid")
.DataBinding(dataBinding => dataBinding
.Ajax()
.Select("_CustomPrimaryDataBinding", "Data", new
RouteValueDictionary { { "area", âddm" }, {
"datasetID", id } })
.OperationMode(GridOperationMode.Server)
)
.EnableCustomBinding(true)
.HtmlAttributes(new {@class = "primaryDataResultGrid" })
.ClientEvents(events => events
.OnLoad("PrimaryDataResultGrid_OnLoad")
.OnDataBound("PrimaryData_OnCommand")
.OnColumnHide("PrimaryData_OnCommand")
.OnColumnShow("PrimaryData_OnCommand")
)
BEXIS Tech Talk #4: The 3rd Party Libraries 6
8. User Interface
⢠Bootstrap
â A framework for
⢠HTML
⢠CSS
⢠JS
â Responsive design
â On client side
BEXIS Tech Talk #4: The 3rd Party Libraries 8
9. User Interface->Bootstrap
<div id="navbarCollapse" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li>@Html.ActionLink("Dashboard", "Index", "Home",
new {area = "" }, null)</li>
<li>@Html.ActionLink("Search", "Index", "Home",
new {area = "ddm" }, null)</li>
</ul>
âŚ
BEXIS Tech Talk #4: The 3rd Party Libraries 9
10. Framework
⢠Unity IoC
â Inversion of Control
â Dependency Injection
⢠Factory Pattern
â Service Locator
⢠Object life cycle mgmt.
â Configuration Based
â Version 2
â URL: https://github.com/unitycontainer/unity
BEXIS Tech Talk #4: The 3rd Party Libraries 10
12. Framework
⢠PostSharp
â Post Compilation Code Weaving
â Used in:
⢠Logging
⢠MVC Action handling
⢠Authorization
â Version: 2.x (community)
â URL: https://www.postsharp.net/
BEXIS Tech Talk #4: The 3rd Party Libraries 12
13. Framework->PostSharp
public class DiagnoseAttribute : OnMethodBoundaryAspect
{
public override void OnEntry(MethodExecutionArgs args)
{
var sw = new Stopwatch();
sw.Start();
args.MethodExecutionTag = sw;
}
âŚ
BEXIS Tech Talk #4: The 3rd Party Libraries 13
14. Framework
⢠NHibernate
â Object Relational Mapping (ORM)
â Configuration Based Mappings
â âŚ
â Version 4
â URL: http://nhibernate.info/
BEXIS Tech Talk #4: The 3rd Party Libraries 14
15. Vaiona
⢠IoC
⢠Logging
⢠Entities
⢠Persistence
⢠Serialization
⢠Web
BEXIS Tech Talk #4: The 3rd Party Libraries 15
https://github.com/javadch/VWF.Mvc
16. Vaiona -> IoC
⢠Provides IoC services
⢠Decouples the clients from any concrete IoC
provider
⢠Used in Logging, Persistence, Search
⢠Configuration based for easy alteration
⢠Multiple Mappings for each
interface/implementation pair, suing
namespaces
BEXIS Tech Talk #4: The 3rd Party Libraries 16
17. Vaiona -> Logging
⢠AOP, cross-cutting functionality
⢠Uses code interception and weaving techniques
(PostSharp)
⢠Aspects (intercept functionsâ execution)
â Trace: records call to methods
â Performance: records methodsâ execution time
â Diagnose: records methodsâ arguments & return
values
â Exception: records not caught exceptions
⢠And log to a DB table using the loggers
BEXIS Tech Talk #4: The 3rd Party Libraries 17
19. Vaiona -> Logging
⢠Entity Logging
â What happened to an entity
â What happened to the relation between 2 entities
⢠Custom Logging
â Free style programmer friendly logging
BEXIS Tech Talk #4: The 3rd Party Libraries 19
20. Vaiona -> Logging
⢠Log records capture information about the:
â Web request (URL, agent, etc.)
â User information (username)
â Action performed (CRUD)
â Call context (assembly, class, method)
â Entity affected (id, type, relations affected)
â Performance (execution time)
â Diagnostics (parameters, arguments, return values)
â General (date, time)
BEXIS Tech Talk #4: The 3rd Party Libraries 20
22. Vaiona -> Logging
⢠Usage scenarios
â System behavior monitoring
â Bottleneck detection
â Logical bug detection
â User studies
â Software improvement planning
â Auditing
â âŚ
BEXIS Tech Talk #4: The 3rd Party Libraries 22
23. Vaiona -> Logging
⢠Limitations
â Not possible to turn it on/off on individual
functions
â Exceptions on the logging itself are not caught
â Log records are persisted async; no guarantee on
writing
BEXIS Tech Talk #4: The 3rd Party Libraries 23
24. Vaiona -> Entities
⢠Base classes for:
â Persisting Data Entities
â Data Modification Auditing
â Versioning and Concurrency Control
â State Mgmt.
BEXIS Tech Talk #4: The 3rd Party Libraries 24
25. Vaiona -> Entities
public class Party : BaseEntity
{
}
public class Dataset : BusinessEntity
{
}
BEXIS Tech Talk #4: The 3rd Party Libraries 25
26. Vaiona -> Entities
public abstract class BaseEntity :
ISystemVersionedEntity
{
public virtual XmlNode Extra { get; set; }
public virtual long Id { get; set; }
public virtual int VersionNo { get; set; }
BEXIS Tech Talk #4: The 3rd Party Libraries 26
public virtual void Dematerialize(bool
includeChildren = true);
public virtual void Materialize(bool
includeChildren = true);
}
27. Vaiona -> Entities
public abstract class BusinessEntity :
BaseEntity, IStatefullEntity,
IAuditableEntity
{
public virtual EntityAuditInfo
CreationInfo { get; set; }
public virtual EntityAuditInfo
ModificationInfo { get; set; }
public virtual EntityStateInfo
StateInfo { get; set; }
}
BEXIS Tech Talk #4: The 3rd Party Libraries 27
28. Vaiona -> Persistence
⢠Persistence Mgmt.
â Schema Export
â DB creation
â DB activity logging
â Caching
â Configuration
â Session Sharing
BEXIS Tech Talk #4: The 3rd Party Libraries 28
31. Vaiona -> Persistence->Setup
Starting up the IoC
protected void Application_Start()
{
IoCFactory.StartContainer
(Path.Combine(AppConfiguration.AppRo
ot, "IoC.config")
, "DefaultContainer");
âŚ
BEXIS Tech Talk #4: The 3rd Party Libraries 31
32. Vaiona -> Persistence->Setup
Exporting the schema
protected void Application_Start()
{
IPersistenceManager pManager =
PersistenceFactory.GetPersistenceManager();
pManager.Configure(AppConfiguration.DefaultApp
licationConnection.ConnectionString,
AppConfiguration.DatabaseDialect, "Default",
AppConfiguration.ShowQueries);
if (AppConfiguration.CreateDatabase)
pManager.ExportSchema();
pManager.Start();
BEXIS Tech Talk #4: The 3rd Party Libraries 32
33. Vaiona -> Persistence->Setup
Registering the DB session manager for MVC
actions
public static void RegisterGlobalFilters
(GlobalFilterCollection filters)
{
filters.Add(new PersistenceContextProviderFilterAttribute());
BEXIS Tech Talk #4: The 3rd Party Libraries 33
34. Vaiona -> Persistence
⢠Unit of Work
â Transaction Mgmt.
â Bulk operations
using (IUnitOfWork uow =
persistenceManager.GetUnitOfWork())
{
IRepository<Unit> repo =
uow.GetRepository<Unit>();
// more repos, more changes
repo.Put(u);
uow.Commit(); // applies all the changes
}
BEXIS Tech Talk #4: The 3rd Party Libraries 34
35. Vaiona -> Persistence
⢠Repository
â CRUD operations on data entities
â Keeps track of changes
â Can return IQueryable for:
⢠further querying
⢠Dynamic querying
â Accepts:
⢠LINQ expressions
⢠named queries
⢠native queries
BEXIS Tech Talk #4: The 3rd Party Libraries 35
36. Vaiona -> Persistence
using (IUnitOfWork uow =
persistenceManager.GetUnitOfWork())
{
var x = new Unit();
IRepository<Unit> repo =
uow.GetRepository<Unit>();
repo.Get(p => p.Id == 21).First()
.ConversionsIamTheSource.ToList()
.ForEach(c => c.Source = x);
var q = repo.Query(p => p.Abbreviation.StartsWith("m"));
var w = from a in q
where a.Dimension.Equals("Length")
select (a);
}
BEXIS Tech Talk #4: The 3rd Party Libraries 36
37. Vaiona -> Serialization
⢠Entities need to be de/serialized in XML
⢠Entities have attributes and relationships
⢠Object graphs may create cycles
BEXIS Tech Talk #4: The 3rd Party Libraries 37
38. Vaiona -> Serialization
[AutomaticMaterializationInfo(
"Amendments", typeof(List<Amendment>),
"XmlAmendments", typeof(XmlDocument))]
public abstract class DataTuple : BaseEntity
BEXIS Tech Talk #4: The 3rd Party Libraries 38
public abstract class BaseEntity
{
public virtual void Dematerialize(bool
includeChildren=true){âŚ}
public virtual void Materialize(bool
includeChildren=true){âŚ}
}
39. Vaiona -> Web
⢠Web Request Interception
⢠MVC Action Interception
âAuthorization
âAmbient Transaction Mgmt.
⢠Web Session Mgmt.
âPer session culture settings
âMulti tenancy
BEXIS Tech Talk #4: The 3rd Party Libraries 39
40. Vaiona -> Web
⢠Layout Mgmt.
â Pages inherit layout from masters
â Masters separate between arrangement and
content
â Arrangement in layout.cshtml file
⢠HTML + placeholders
â Content from services
⢠Registered in layout.xml
BEXIS Tech Talk #4: The 3rd Party Libraries 40
43. Lucene
⢠Apache Lucene.Net
⢠Search on
â Metadata
⢠Datasets created between 2010 and 2015
⢠Datasets in project sWEEP
â Primary data
⢠Datasets that contain value 22
⢠Datasets that contain information about âtemperatureâ
⢠Datasets that have a âtemperatureâ column and that
column contains values >= 22
BEXIS Tech Talk #4: The 3rd Party Libraries 43
44. Outlook
Whats next in the talk series?
How to develop a module for BExIS
BEXIS Tech Talk #4: The 3rd Party Libraries 44