diff --git a/ee/changelogs/unreleased/refactoring-ee-entities-15.yml b/ee/changelogs/unreleased/refactoring-ee-entities-15.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5f099037c73156dfb01079da1c8f7db9c9e26d8e
--- /dev/null
+++ b/ee/changelogs/unreleased/refactoring-ee-entities-15.yml
@@ -0,0 +1,5 @@
+---
+title: Separate code review, design and group modules into own class files
+merge_request: 27860
+author: Rajendra Kadam
+type: added
diff --git a/ee/lib/ee/api/entities.rb b/ee/lib/ee/api/entities.rb
index 0d464f02d487b131134bda4a6010b0bccb2918fd..a66b803ffed1ad3727791adf65cfcd77f2be2d24 100644
--- a/ee/lib/ee/api/entities.rb
+++ b/ee/lib/ee/api/entities.rb
@@ -3,37 +3,9 @@
 module EE
   module API
     module Entities
-      module ProtectedBranch
-        extend ActiveSupport::Concern
-
-        prepended do
-          expose :unprotect_access_levels, using: ::API::Entities::ProtectedRefAccess
-          expose :code_owner_approval_required
-        end
-      end
-
-      module IssueBasic
-        extend ActiveSupport::Concern
-
-        prepended do
-          expose :weight, if: ->(issue, _) { issue.supports_weight? }
-        end
-      end
-
       ########################
       # EE-specific entities #
       ########################
-      module DesignManagement
-        class Design < Grape::Entity
-          expose :id
-          expose :project_id
-          expose :filename
-          expose :image_url do |design|
-            ::Gitlab::UrlBuilder.build(design)
-          end
-        end
-      end
-
       module Nuget
         class ServiceIndex < Grape::Entity
           expose :version
@@ -96,56 +68,6 @@ class SearchResults < Grape::Entity
           expose :data, using: EE::API::Entities::Nuget::SearchResult
         end
       end
-
-      module Analytics
-        module CodeReview
-          class MergeRequest < ::API::Entities::MergeRequestSimple
-            expose :milestone, using: ::API::Entities::Milestone
-            expose :author, using: ::API::Entities::UserBasic
-            expose :approved_by_users, as: :approved_by, using: ::API::Entities::UserBasic
-            expose :notes_count do |mr|
-              if options[:issuable_metadata]
-                # Avoids an N+1 query when metadata is included
-                options[:issuable_metadata][mr.id].user_notes_count
-              else
-                mr.notes.user.count
-              end
-            end
-            expose :review_time do |mr|
-              time = mr.metrics.review_time
-
-              next unless time
-
-              (time / ActiveSupport::Duration::SECONDS_PER_HOUR).floor
-            end
-            expose :diff_stats
-
-            private
-
-            # rubocop: disable CodeReuse/ActiveRecord
-            def diff_stats
-              result = {
-                additions: object.diffs.diff_files.sum(&:added_lines),
-                deletions: object.diffs.diff_files.sum(&:removed_lines),
-                commits_count: object.commits_count
-              }
-              result[:total] = result[:additions] + result[:deletions]
-              result
-            end
-            # rubocop: enable CodeReuse/ActiveRecord
-          end
-        end
-
-        module GroupActivity
-          class IssuesCount < Grape::Entity
-            expose :issues_count
-          end
-
-          class MergeRequestsCount < Grape::Entity
-            expose :merge_requests_count
-          end
-        end
-      end
     end
   end
 end
diff --git a/ee/lib/ee/api/entities/analytics/code_review/merge_request.rb b/ee/lib/ee/api/entities/analytics/code_review/merge_request.rb
new file mode 100644
index 0000000000000000000000000000000000000000..eba732ccf931c41593f3ef5122dd90ea684a91c3
--- /dev/null
+++ b/ee/lib/ee/api/entities/analytics/code_review/merge_request.rb
@@ -0,0 +1,47 @@
+# frozen_string_literal: true
+
+module EE
+  module API
+    module Entities
+      module Analytics
+        module CodeReview
+          class MergeRequest < ::API::Entities::MergeRequestSimple
+            expose :milestone, using: ::API::Entities::Milestone
+            expose :author, using: ::API::Entities::UserBasic
+            expose :approved_by_users, as: :approved_by, using: ::API::Entities::UserBasic
+            expose :notes_count do |mr|
+              if options[:issuable_metadata]
+                # Avoids an N+1 query when metadata is included
+                options[:issuable_metadata][mr.id].user_notes_count
+              else
+                mr.notes.user.count
+              end
+            end
+            expose :review_time do |mr|
+              time = mr.metrics.review_time
+
+              next unless time
+
+              (time / ActiveSupport::Duration::SECONDS_PER_HOUR).floor
+            end
+            expose :diff_stats
+
+            private
+
+            # rubocop: disable CodeReuse/ActiveRecord
+            def diff_stats
+              result = {
+                additions: object.diffs.diff_files.sum(&:added_lines),
+                deletions: object.diffs.diff_files.sum(&:removed_lines),
+                commits_count: object.commits_count
+              }
+              result[:total] = result[:additions] + result[:deletions]
+              result
+            end
+            # rubocop: enable CodeReuse/ActiveRecord
+          end
+        end
+      end
+    end
+  end
+end
diff --git a/ee/lib/ee/api/entities/analytics/group_activity/issues_count.rb b/ee/lib/ee/api/entities/analytics/group_activity/issues_count.rb
new file mode 100644
index 0000000000000000000000000000000000000000..7e0ec790252703e9a932155ad65529f87b036622
--- /dev/null
+++ b/ee/lib/ee/api/entities/analytics/group_activity/issues_count.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+module EE
+  module API
+    module Entities
+      module Analytics
+        module GroupActivity
+          class IssuesCount < Grape::Entity
+            expose :issues_count
+          end
+        end
+      end
+    end
+  end
+end
diff --git a/ee/lib/ee/api/entities/analytics/group_activity/merge_requests_count.rb b/ee/lib/ee/api/entities/analytics/group_activity/merge_requests_count.rb
new file mode 100644
index 0000000000000000000000000000000000000000..8a9ea68665bb6548f7b7959334562d1ef0d4ff00
--- /dev/null
+++ b/ee/lib/ee/api/entities/analytics/group_activity/merge_requests_count.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+module EE
+  module API
+    module Entities
+      module Analytics
+        module GroupActivity
+          class MergeRequestsCount < Grape::Entity
+            expose :merge_requests_count
+          end
+        end
+      end
+    end
+  end
+end
diff --git a/ee/lib/ee/api/entities/design_management/design.rb b/ee/lib/ee/api/entities/design_management/design.rb
new file mode 100644
index 0000000000000000000000000000000000000000..9a94f9e23666b0df2dec714f5d96431c04f78867
--- /dev/null
+++ b/ee/lib/ee/api/entities/design_management/design.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+module EE
+  module API
+    module Entities
+      module DesignManagement
+        class Design < Grape::Entity
+          expose :id
+          expose :project_id
+          expose :filename
+          expose :image_url do |design|
+            ::Gitlab::UrlBuilder.build(design)
+          end
+        end
+      end
+    end
+  end
+end
diff --git a/ee/lib/ee/api/entities/issue_basic.rb b/ee/lib/ee/api/entities/issue_basic.rb
new file mode 100644
index 0000000000000000000000000000000000000000..59e0d8ac1fb37e6bae9a7e2362b5d7c8f63c6092
--- /dev/null
+++ b/ee/lib/ee/api/entities/issue_basic.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+module EE
+  module API
+    module Entities
+      module IssueBasic
+        extend ActiveSupport::Concern
+
+        prepended do
+          expose :weight, if: ->(issue, _) { issue.supports_weight? }
+        end
+      end
+    end
+  end
+end
diff --git a/ee/lib/ee/api/entities/protected_branch.rb b/ee/lib/ee/api/entities/protected_branch.rb
new file mode 100644
index 0000000000000000000000000000000000000000..51944b38aeca8184a12cbde51acb66f8980273e7
--- /dev/null
+++ b/ee/lib/ee/api/entities/protected_branch.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+module EE
+  module API
+    module Entities
+      module ProtectedBranch
+        extend ActiveSupport::Concern
+
+        prepended do
+          expose :unprotect_access_levels, using: ::API::Entities::ProtectedRefAccess
+          expose :code_owner_approval_required
+        end
+      end
+    end
+  end
+end