首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取公共表定义的算法?

提取公共表定义的算法?
EN

Stack Overflow用户
提问于 2013-10-04 15:48:23
回答 1查看 43关注 0票数 1

我正在使用代码生成来生成与某个数据库中的表定义相对应的接口。

由于数据库非常混乱,我得到了大约500个接口(对应于500个表),每个接口都有自己的定义。

一些接口可以相互继承,而对于一些接口,可以提取公共接口以最小化代码定义。例如:

代码语言:javascript
复制
interface One
{
    int FirstField { get; set; }
    bool SecondField { get; set; }
    DateTime ThirdField { get; set; }   
}

interface Two
{
    int FirstField { get; set; }
    DateTime ThirdField { get; set; }
    double FourthField { get; set; }
}

我想在代码上执行某种最小化,以使生成的代码数量最少(通过多重继承和公共代码提取)。从上面的示例中,我需要获得如下内容:

代码语言:javascript
复制
interface OneTwoCommon
{
    int FirstField { get; set; }
    DateTime ThirdField { get; set; }   

}

interface One : OneTwoCommon
{
    bool SecondField { get; set; }
}

interface Two : OneTwoCommon
{
    double FourthField { get; set; }
}

算法的哪个分支处理这些问题?

我从哪里开始查找这些算法呢?

我甚至不知道在Google中写些什么才能得到相关的结果。

EN

回答 1

Stack Overflow用户

发布于 2013-10-22 23:00:39

我想出了一个简单的算法。

  • 将接口的表面定义为实现它的其他接口的数量,乘以该接口的属性数量
  • 目标是构造一个新的接口,其中包含所有使用的属性的子集,并且具有最大可能的表面

初始化:

首先,我们将所有属性按包含它的接口数降序排列到LProperties中(因此最常用的属性将位于顶部)

  • 从LProperties中选择第一个属性( P1 ),仅使用该属性创建新的接口ITemp

  • P1 of ITemp (可实现它的现有接口数乘以属性数)

迭代:

  • 从LProperties (现在是P2)中选择第一个属性,将其放入ITemp (注意: P2不是P1,因为我们弹出了P1)
  • 新表面
  • 新表面>旧表面,从P2中删除LProperties,将其保存到ITemp,记住表面*,从ITemp

中删除P2

迭代:

  • next属性从LProperties (现在的P3)中,将其放入ITemp (注意: P2仍在LProperties中,但我们已经对其进行了处理)
  • 如果新表面>旧表面从LProperties中删除P3,请将其保存到ITemp,否则将P3从ITemp

中删除

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19175988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档