相关疑难解决方法(0)

ASP.NET MVC3和Entity Framework Code第一个架构

我之前的问题让我再次思考层,存储库,依赖注入和这样的架构.

我的架构现在看起来像这样:
我首先使用EF代码,所以我只创建了POCO类和上下文.这创建了db和model.
级别更高的是业务层类(提供者).我为每个域使用不同的提供程序...比如MemberProvider,RoleProvider,TaskProvider等.我在每个提供程序中创建我的DbContext的新实例.
然后我在我的控制器中实例化这些提供程序,获取数据并将它们发送到Views.

我的初始架构包括存储库,我之所以摆脱它是因为我被告知它只会增加复杂性,所以为什么我不仅仅使用EF.我想这样做..直接从控制器使用EF,但我必须编写测试,它与真正的数据库有点复杂.我不得不假装 - 以某种方式模拟数据.因此,我为每个提供商创建了一个接口,并使列表中的硬编码数据成为假提供者.有了这个,我回到了一些东西,我不知道如何正确地进行.

这些事情开始过于复杂化......许多方法和"模式"......它产生了太多的噪音和无用的代码.

是否有任何SIMPLE和可测试的体系结构用于使用Entity Framework创建和ASP.NET MVC3应用程序?

architecture asp.net-mvc unit-testing entity-framework code-first

53
推荐指数
2
解决办法
2万
查看次数

如何构建我的类以便更容易进行单元测试?

我承认,我没有经过单元测试......但我想.话虽如此,我有一个非常复杂的注册过程,我想优化,以便更容易进行单元测试.我正在寻找一种方法来构建我的类,以便将来可以更轻松地测试它们.所有这些逻辑都包含在MVC框架中,因此您可以假设控制器是从中实例化所有内容的根.

为了简化,我实际上要问的是如何设置一个系统,您可以使用CRUD更新管理任意数量的第三方模块.这些第三方模块都是RESTful API驱动的,响应数据存储在本地副本中.删除用户帐户之类的东西需要触发删除所有相关模块(我称之为提供者).这些提供者可能依赖于另一个提供者,因此删除/创建的顺序很重要.我对我应该专门用来支持我的应用程序的设计模式感兴趣.

注册跨越多个类并将数据存储在多个db表中.这是不同提供者和方法的顺序(它们不是静态的,只是为了简洁起见):

  1. Provider::create('external::create-user')在特定提供商的特定步骤启动注册.第一个参数中的双冒号语法表示该类应该触发创建providerClass::providerMethod.我提出了一个一般假定Provider将与方法的接口create(),update(),delete()所有其他供应商将实现它.如何实例化这可能是你需要帮助我的东西.
  2. $user = Provider_External::createUser() 在外部API上创建用户,返回成功,用户存储在我的数据库中.
  3. $customer = Provider_Gapps_Customer::create($user) 在第三方API上创建客户,返回成功并在本地存储.
  4. $subscription = Provider_Gapps_Subscription::create($customer) 在第三方API上创建与先前创建的客户关联的订阅,返回成功并在本地存储.
  5. Provider_Gapps_Verification::get($customer, $subscription)从外部API检索行.该信息存储在本地.另一个电话是我正在跳过以保持简洁.
  6. Provider_Gapps_Verification::verify($customer, $subscription)执行外部API验证过程.其结果存储在本地.

这是一个非常愚蠢的样本,因为实际代码依赖于至少6个外部API调用和10个本地数据库行在注册期间创建.在构造函数级别使用依赖注入是没有意义的,因为我可能需要在控制器中实例化6个类,而不知道我是否甚至需要它们.我想要完成的事情就像Provider::create('external')我只是指定启动注册的起始步骤.


问题的关键

如您所见,这只是注册过程的一个示例.我正在构建一个系统,我可以拥有数百个服务提供商(外部API模块),我需要注册,更新,删除等.这些提供商中的每一个都与用户帐户相关联.

我想以一种方式构建这个系统,我可以在触发创建新提供程序时指定操作顺序(步骤).换句话说,允许我指定在事件链中接下来触发哪个提供者/方法组合,因为创建可以跨越这么多步骤.目前,我通过主题/观察者模式发生了这一系列事件.我希望可能将此代码移动到数据库表,provider_steps在此列出每个步骤以及它的跟随success_stepfailure_step(对于回滚和删除).该表如下所示:

  # the id of the parent provider row
  provider_id int(11) unsigned primary key,
  # the short, slug name of the step for using in codebase
  step_name varchar(60), …
Run Code Online (Sandbox Code Playgroud)

php oop dependencies unit-testing design-patterns

28
推荐指数
2
解决办法
794
查看次数

PHP实体类生成器

我正在创建实体(实体 - 视图 - 控制器)(换句话说,MVC模型)类,它理论上与我拥有的数据库表匹配.有没有一个工具可以读取mysql表并创建一个模型类代码?(不执行时,需要输出代码)我希望输出像

class{
public $columnname1;
public $columnname2;
public $columnname3;
public $columnname4;
public $columnname5;
public $columnname6;
function __construct(&$columnname1, &$columnname2){...}
function insert(&$columnname1, &$columnname2){}
function delete(&$columnname1){}
...
}
Run Code Online (Sandbox Code Playgroud)

一个也可以通过id函数创建插入,更新和删除的工具对我有很大的帮助.

该工具可以是免费的或付费的.

php mysql oop

27
推荐指数
4
解决办法
3万
查看次数

为什么要使用Hibernate/nHibernate?

我发现自己做了很多工作来获得nHibernate设置,我想知道:为什么要使用像Hibernate/NHibernate这样的框架?我相信很多人都喜欢这个框架,但我不清楚其优缺点.延迟加载有哪些优点和缺点,Hibernate还有其他功能吗?有没有什么能使这样的框架更容易使用(最佳实践,其他框架等)?

nhibernate hibernate

9
推荐指数
0
解决办法
8520
查看次数

我应该用什么标准来评估ORM?

这里有很多问题要问'我应该用什么样的ORM用x和y',但我没有看到任何特别询问如何选择一个.相关:为什么要使用ORM?,我应该将什么ORM用于ASP.Net MVC项目?,有没有充分的理由不使用ORM?和更多.

世界上有很多ORM.我想知道如何比较它们.我听说过活动记录模型和领域模型之类的东西,我不确定这些是什么意思.那么我可以用一套好的标准来比较一个ORM到另一个ORM?

如果您想知道,我们的环境是C#,MVC,SQL Server.

nhibernate orm entity-framework linq-to-sql

4
推荐指数
1
解决办法
321
查看次数

ORM:我为什么要用它?

可能重复:
有没有充分的理由不使用ORM?
你为什么要使用ORM?

您好,我在SQL开发多年(许多不同的SQL服务器,如Oracle,MSSql,Mysql),我一直很高兴这样做.我最近看到很多关于ORM的东西,我问我为什么要走向这个世界.你能不能花时间学习一种不同的方式来做我今天已经做过的事情,能给我一些好处吗?在此先感谢c.

sql orm entity-framework

2
推荐指数
1
解决办法
1520
查看次数

在c#中解析类型类

我有这样的代码

public class People
{
    public string name { get; set; }
}

public class Animal
{
    public string age { get; set; }
}

class Test
{
    public void DataPeopleList()
    {
        string sql = "SELECT * FROM People"; 
        SqlCommand cmd = new SqlCommand(sql, conn); 
        SqlDataReader rdr = cmd.ExecuteReader();
        List<People> list = new List<People>();
        while (rdr.Read()) {
            People p = new People();
            p.name = rdr["name"].ToString();
            list.Add(p);
        } 
        rdr.Close();             
    }

    public void DataAnimalList()
    {
        string sql = "SELECT * FROM Animal"; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net

0
推荐指数
1
解决办法
465
查看次数