小编Lad*_*nka的帖子

如何处理内部公司框架和SW工厂?

根据我自己的经验和朋友的经验,我发现很多公司都有一些奇怪的想法来开发自己的框架和SW工厂(为你构建应用程序的骨架).这些想法通常基于相信自己的框架将比其他任何可用的框架更好.如何处理这些想法以及如何解释它并不总是好的方法去?

为什么我认为内部框架/工厂不好:

  • 预算和资源 - 通常只有一些初始预算来创建框架.没有人考虑维护和支持框架所需的预算.没有人能够估算维护所需的预算和资源.一开始,没有人考虑维护多个版本的框架来支持现有的应用程序.
  • 缺乏经验 - 框架通常由没有任何经验或"顾问"支持的人创建 - 通常是具有相似技能的更昂贵的人.
  • 架构/设计 - 框架中的任何架构问题都会影响使用此框架构建的所有应用程序 框架中糟糕的设计缺陷迫使开发人员以糟糕的方式编写应用程序.
  • 技术债务 - 框架中的坏代码是技术债务.
  • 银弹的错误信念 - 管理者认为自己的框架/工厂是银弹.所有应用程序都将以相同的方式编写,并且易于维护.我的经验是,这很简单,不是真理.即使SW工厂,每个应用程序都是特定的.
  • 文档不足 - 文档首先受到低预算的影响.没有文档的框架是没用的.Reflector(.NET)是我最好的朋友.
  • 用户组不足 - 内部框架只有很小的用户组.小用户群意味着小经验.如果我使用公共工具/框架并且我遇到问题,我可以在SO(或类似的网站)上提问,或者只是尝试在谷歌上找到答案.使用内部框架是不可能的.
  • 策略 - 公司策略强制您使用框架来证明框架成本.到目前为止,在收集第一个要求之前选择框架.
  • 禁止抱怨框架.
  • 禁止使用其他框架.

为什么我认为公司这样做:

  • 傲慢与利己主义 - 公司的sombody认为他可以做得更好.
  • 无知 - 忽视现有的框架/解决方案以及只有好的框架能够存活足够长时间才能流行的事实.忽略用户组和Internet上已有的可用信息.
  • 管理失败和无能 - 不理解这种决定的影响(特别是长期).基于错误信息的决策.没有SW开发背景的管理.

我知道有时需要自己的专用场景解决方案或框架,但我厌倦了所有这些"伟大的内部框架"来创建Web或桌面应用程序.我错了吗?这些框架真的需要(.NET和Java世界)吗?你能为我提供一些例子或理由说明为什么内部框架/工厂是好的?

编辑:

感谢您的回答,但我期待一些建议如何作为开发人员(除了更换工作)处理问题而不是作为经理.

language-agnostic frameworks

11
推荐指数
1
解决办法
642
查看次数

跨实体数据模型撰写查询

如果模型访问相同的底层数据库,是否有办法从2个不同的实体模型组成查询.

我的方案是:我有一个使用EF进行数据访问的框架.(EDM 1)我有一个客户端应用程序,它使用框架的服务,并使用EF进行自己的数据访问.(EDM2)

在某些情况下,我需要撰写查询并加入跨越2个EDM的实体.

有没有办法在没有从第一个EDM获取内存中的数据然后从第二个EDM的实体在内存中应用其他谓词/连接的情况下执行此操作?

我希望我能以正确的方式阐明这一点

编辑 @Ladislav Mrnka:第一个EDM是可重用框架的数据访问层.将来自此EDM的EF生成实体与消费客户端的实体耦合是没有意义的.如果我这样做,它会破坏API的可重用性并且我必须携带额外的膨胀(客户端的EF元数据和数据库表)每次我想重新部署框架.这也会使设计师在管理模型时变得笨拙.

我目前正在使用你提到的第7项作为解决方案而且性能很糟糕,因为我必须最终返回比使用EDM1的框架所需的更多数据(即实体),然后过滤掉不需要的数据基于基于第二EDM中的实体的属性值的谓词/条件.最终结果是性能下降和DBA不满意.

出于这个原因,我最终将检索实体所需的逻辑推送到SPROC,在该SPROC中,我可以访问EDM使用的表并应用所需的谓词,并使整个查询在DB中运行,而不是将数据存入内存然后过滤掉不必要的.Downside是我不能使用LINQ

你提到的第8项听起来很有意思,但听起来我怀疑你在设计时得到了强烈的打字,或者你呢?你可以在某个地方上传你的代码示例,以便我可以尝试一下吗?

entity-framework entity-framework-4

11
推荐指数
1
解决办法
2259
查看次数

EF Code First:IValidatable Object未验证

我在一个简单的测试场景中有一个对象,它使用EF Code First并实现IValidatableObject.有一些非常简单的逻辑可以添加验证错误并将其返回.对象上还有其他验证.

但是,在保存对象时 - 基于属性的验证工作 - IValidatableObject接口似乎永远不会触发.调试器不会进入它,并且调用SaveChanges()或GetValidationErrors()时错误永远不会出现.

public class Customer : IValidatableObject {
[Key]
public int Id { get; set; }

[StringLength(50)]
[DisplayName("First Name")]

public string FirstName { get; set; }

[Required]
[DisplayName("Last Name")]
[StringLength(50)]
public string LastName { get; set; }

[Required]
[StringLength(100)]
public string Company { get; set; }

[StringLength(200)]
public string Email { get; set; }

[DisplayName("Credit Limit")]
public decimal CreditLimit { get; set; }

[DisplayName("Entered On")]
public DateTime? Entered { get; set; }


public virtual …
Run Code Online (Sandbox Code Playgroud)

entity-framework code-first

11
推荐指数
1
解决办法
2933
查看次数

实体框架4 - 自定义复杂类型映射

我有一个写得不好的遗留数据库模式,我正在通过EF Code First工作.我目前正在映射POCO实体,并希望创建一个"地址"复杂类型,并在存储街道地址信息的任何地方使用它.不幸的是,并非所有的地址字段在数据库中都被命名为相同(即,一个表可能具有"Address1",而另一个表将具有"Street1",即使它们引用相同的东西.

有没有办法根据给定的实体为复杂类型创建自定义映射?那个映射是什么样的?

entity-framework-4 ef-code-first entity-framework-4.1

11
推荐指数
1
解决办法
8025
查看次数

EF4.1 Code First Complex Type作为主键

我目前正在尝试使用实体框架4.1的RC及其代码第一种方法为我的域对象实现存储库.现在我有一个域实体"Voyage",它有一个封装在"VoyageNumber"类型中的唯一标识符

public class VoyageNumber
{
    private readonly string number;

    public VoyageNumber(string number)
    {
        Validate.NotNull(number, "VoyageNumber is required");

        this.number = number;
    }

    public string Id
    {
        get { return number; }
    }
Run Code Online (Sandbox Code Playgroud)

现在,当我在配置DbContext时执行此操作时出现异常:

modelBuilder.Entity<Voyage>().HasKey<VoyageNumber>(k => k.VoyageNumber);
Run Code Online (Sandbox Code Playgroud)

属性'VoyageNumber'不能用作实体'Domain.Model.Voyages.Voyage'的关键属性,因为属性类型不是有效的键类型.只有标量类型,字符串和byte []是受支持的键类型.

当我尝试这个时:

modelBuilder.Entity<Voyage>().HasKey<string>(k => k.VoyageNumber.Id);
Run Code Online (Sandbox Code Playgroud)

属性表达式'k => k.VoyageNumber.Id'无效.表达式应该代表一个属性:C#:'t => t.MyProperty'

我是否真的要丢弃我的VoyageNumber并用原始类型替换它?

.net domain-driven-design entity-framework primary-key ef-code-first

11
推荐指数
1
解决办法
3640
查看次数

存储过程和EF代码优先

我想使用存储过程从数据库中检索实体,我不关心跟踪更改.我只需要解决所有实体,包括相关实体.

  1. 我必须使用SqlCommand吗?

  2. 那些复杂的属性,它们也会得到解决吗?

  3. 您可以告诉我任何其他限制吗?

谢谢!

stored-procedures entity-framework entity-framework-4.1

11
推荐指数
2
解决办法
9852
查看次数

实体框架4.1 RC:Code First EntityTypeConfiguration继承问题

我正在尝试使用常见的EntityTypeConfiguration类来为我的所有实体配置主键,以便每个派生的配置类不会重复.我的所有实体都实现了一个公共接口IEntity(它表示每个实体必须具有int类型的Id属性).

我的配置基类如下所示:

public class EntityConfiguration<TEntity> : EntityTypeConfiguration<TEntity>

    where TEntity : class , IEntity {

    public EntityConfiguration() {

        HasKey( e => e.Id );

        Property( e => e.Id ).HasDatabaseGeneratedOption( DatabaseGeneratedOption.Identity );

    }

}
Run Code Online (Sandbox Code Playgroud)

然后每个实体都有自己的特定配置类,扩展这个类,如下所示:

public class CustomerConfiguration : EntityConfiguration<Customer> {

    public CustomerConfiguration() : base() {

        // Entity specific configuration here

    }

}
Run Code Online (Sandbox Code Playgroud)

它编译得很好,但我遇到的问题是,在运行时,当EF 4.1 RC尝试创建模型时,我会得到以下异常:

System.InvalidOperationException未处理Message =关键组件"Id"不是"Customer"类型的声明属性.验证它是否未从模型中明确排除,并且它是有效的原始属性.来源=的EntityFramework

如果我将CustomerConfiguration类更改为从EntityTypeConfiguration <Customer>扩展并重复主键配置,那么它工作正常,但我失去了共享通用配置的能力(DRY主体是动机).

  • 我在这里做错了吗?
  • 是否有另一种方法可以在实体之间共享通用配置?

这里参考的是其他涉及的类:

public interface IEntity {

    int Id { get; set; }

}

public class Customer : IEntity {

    public virtual int …
Run Code Online (Sandbox Code Playgroud)

c# ef-code-first entity-framework-4.1

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

在Entity Framework 4.1 Code First中创建双向一对一关系

我想使用EF Code First在两个实体之间创建双向一对一关系.我遇到以下代码的问题.你觉得我应该怎么做?

public class User
{
    public string ID { get; set; }
    public string LastName { get; set; }
    public string Password { get; set; }
    public string FirstName { get; set; }

    public int ProfileID { get; set; }
    public Profile Profile { get; set; }

}
public class Profile
{
    public int UserID { get; set; }
    public User User { get; set; }
    public int ProfileID { get; set; }
    public string ProfileName { get; …
Run Code Online (Sandbox Code Playgroud)

code-first relationships entity-framework-4.1

11
推荐指数
1
解决办法
4675
查看次数

整个org.springframework的Maven依赖

如何为所有人设置Maven依赖org.springframework

我的意思是,如何在几行中完成它,而不是为每个模块提供依赖,例如:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>3.0.5.RELEASE</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

等等..

谢谢你的帮助

spring dependencies maven

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

实体框架迁移 - 启用AutoMigrations以及添加的迁移

我在我的项目中使用Entity Framework 4.3 Migrations.我想使用自动迁移,这样当我修改我的域对象和我的上下文类时,我的数据库会在运行项目时自动更新.到目前为止,我有这个工作.

除了自动迁移之外,我还想使用一些添加的迁移,我希望应用程序在运行应用程序时自动跳转到最新版本(基于我添加的迁移).

为了做到这一点,我把它放在global.asax文件中......

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Core.Migrations.Configuration>());
Run Code Online (Sandbox Code Playgroud)

现在这可行,但是当我这样做时,它不再根据我的域对象自动更新数据库.

我希望能够完全删除数据库,然后运行应用程序并运行所有自动迁移,然后运行我的显式迁移并将数据库升级到最新版本.

我知道我已经在之前的项目中使用了这个,但我不确定在这种情况下我做错了什么.

谢谢

c# entity-framework asp.net-mvc-3 ef-migrations

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