仅显示DBContext中的聚合根

时间:2015-07-03 17:46:38

标签: entity-framework domain-driven-design dbcontext aggregateroot

我是DDD的新人。在我们的DDD项目中,我们要求我们的DBContext只应公开AggregateRoots。假设我们的DbContext如下所示

public class ClassContext :  DbContext
{ 
    public DbSet<Class> Classes{ get; set; }
    public DbSet<Students> Students{ get; set; }
}

和Class是聚合根。以下实施方式是否正确

 public class ClassContext :  DbContext
    { 
        public DbSet<Class> Classes{ get; set; }
        private DbSet<Students> Students{ get; set; }
    }

感谢任何评论

2 个答案:

答案 0 :(得分:0)

我认为不需要学生的私人声明。 据推测,Class对象包含类似

的内容
<?php get_header(); ?>

<?php
$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;

// WP_Query arguments
$args = array (
    'post_type'              => the_post(),
    'posts_per_page'         => '3',
    'paged' => $paged
);
?>
<?php

// The Query
$cquery = new WP_Query( $args );
while ( $cquery->have_posts() ) : $cquery->the_post();
?>
<div class="row">
                    	<div class="img"><a href="<?php the_permalink() ?>" class="imgPos"><?php the_post_thumbnail('full'); ?></a></div>
                        <div class="text">
                        	<h2><a href="<?php the_permalink() ?>" style="color:#545454;"><?php the_title(); ?></a></h2>
                            <h3 style="line-height: 1px;"><span class="floatL">By &nbsp;</span> <span class="floatL"> <?php the_author_posts_link(); ?> &nbsp;</span> <span class="floatL">&nbsp; - &nbsp;</span> <span class="floatL"><?php the_time('F jS, Y'); ?></span><div class="clr"></div></h3>
                            <p><?php the_content('Read More') ?></p>
                           
                        </div> 
                        </div> 
<?php
$post->ID;
endwhile;

$big = 999999999; // need an unlikely integer
?>
<div class="row">
<div class="pagination">
<?php
echo paginate_links( array(
    'base' => str_replace( $big, '', esc_url( get_pagenum_link( $big ) ) ),
    'format' => '?paged=%#%',
    'current' => max( 1, get_query_var('paged') ),
    'total' =>  $cquery->max_num_pages
) );
?>
</div>
</div>
<?php get_footer(); ?>

所以,鉴于要求您只展示聚合根,您找到学生的代码总是需要找到一个班级并从中拉出学生。

答案 1 :(得分:0)

考虑应用程序中的聚合根确实很有用,但不要尝试将DDD概念应用于Entity Framework类模型。

实体框架类模型是域模型。这是一个数据访问层。关于包含或隐藏实体和/或导航属性的任何考虑都应该通过促进平滑的数据访问来激励,仅此而已。

您不太可能只是通过课程阅读/创建/更新/删除学生。这会产生不必要的笨重代码。谁说学生总是在课堂上?

但也许这不是聚合的最好例子。 StudentClass没有识别关系,因为下次他将在另一个班级。它与经典的Order-OrderLine关系会有所不同。我可以想象,在这种情况下,您可能只会公开DbSet<Order>

所以只需将DbSet<Students>公开为公共类。