kidroca

Simple-Data-Mapper

Oct 31st, 2015
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.88 KB | None | 0 0
  1. namespace StudentSystem.Repositories.DataMappers
  2. {
  3.     using System.Linq;
  4.     using System.Reflection;
  5.  
  6.     using DbModels;
  7.     using RequestModels;
  8.  
  9.     public class DataMapper : IDataMapper
  10.     {
  11.         /// <summary>
  12.         /// Recursively binding student's homeworks and courses isn't implemented as it seem to me that it's
  13.         /// adding too much overhead on the application, and it is an overkill for a simple app.
  14.         /// </summary>
  15.         public StudentRequestModel ToStudentRequestModel(Student student)
  16.         {
  17.             var requestModel = new StudentRequestModel();
  18.             this.ReflectionMapper(student, requestModel);
  19.  
  20.             return requestModel;
  21.         }
  22.  
  23.         public Student ToStudentDatabaseModel(StudentRequestModel student)
  24.         {
  25.             var databaseModel = new Student();
  26.             this.ReflectionMapper(student, databaseModel);
  27.  
  28.             return databaseModel;
  29.         }
  30.  
  31.         public CourseRequestModel ToCourseRequestModel(Course course)
  32.         {
  33.             var requestModel = new CourseRequestModel();
  34.             this.ReflectionMapper(course, requestModel);
  35.  
  36.             foreach (Student student in course.StudentsInCourse)
  37.             {
  38.                 requestModel.EnlistedStudents
  39.                     .Add(this.ToStudentRequestModel(student));
  40.             }
  41.  
  42.             foreach (Homework homework in course.Homeworks)
  43.             {
  44.                 requestModel.Homeworks
  45.                     .Add(this.ToHomeworkRequestModel(homework));
  46.             }
  47.  
  48.             return requestModel;
  49.         }
  50.  
  51.         public Course ToCourseDatabaseModel(CourseRequestModel course)
  52.         {
  53.             var databaseModel = new Course();
  54.             this.ReflectionMapper(course, databaseModel);
  55.  
  56.             foreach (StudentRequestModel student in course.EnlistedStudents)
  57.             {
  58.                 databaseModel.StudentsInCourse
  59.                     .Add(this.ToStudentDatabaseModel(student));
  60.             }
  61.  
  62.             foreach (HomeworkRequestModel homework in course.Homeworks)
  63.             {
  64.                 databaseModel.Homeworks
  65.                     .Add(this.ToHomeworkDatabaseModel(homework));
  66.             }
  67.  
  68.             return databaseModel;
  69.         }
  70.  
  71.         public HomeworkRequestModel ToHomeworkRequestModel(Homework homework)
  72.         {
  73.             var requestModel = new HomeworkRequestModel();
  74.             this.ReflectionMapper(homework, requestModel);
  75.  
  76.             requestModel.Student = this.ToStudentRequestModel(homework.Student);
  77.             requestModel.Course = this.ToCourseRequestModel(homework.Course);
  78.  
  79.             return requestModel;
  80.         }
  81.  
  82.         public Homework ToHomeworkDatabaseModel(HomeworkRequestModel homework)
  83.         {
  84.             var databaseModel = new Homework();
  85.             this.ReflectionMapper(homework, databaseModel);
  86.  
  87.             databaseModel.Student = this.ToStudentDatabaseModel(homework.Student);
  88.             databaseModel.Course = this.ToCourseDatabaseModel(homework.Course);
  89.  
  90.             return databaseModel;
  91.         }
  92.  
  93.         private void ReflectionMapper<T, TResult>(T model, TResult mapToModel)
  94.             where T : class
  95.             where TResult : class
  96.         {
  97.             var modelProperties = model.GetType().GetProperties();
  98.             var mapToProperties = mapToModel.GetType().GetProperties();
  99.  
  100.             foreach (PropertyInfo mappedProperty in mapToProperties)
  101.             {
  102.                 if (mappedProperty.PropertyType.IsValueType ||
  103.                     mappedProperty.PropertyType.IsEquivalentTo(typeof(string)))
  104.                 {
  105.                     var value = modelProperties
  106.                         .First(prop => prop.Name.Equals(mappedProperty.Name))
  107.                         .GetValue(model);
  108.  
  109.                     mappedProperty.SetValue(mapToModel, value);
  110.                 }
  111.             }
  112.         }
  113.     }
  114. }
Advertisement
Add Comment
Please, Sign In to add comment